![图片[1]-MySQL 8.0 升级必踩之坑:轻松解决 `Invalid default value for 'comment_date'` 错误](https://share.0f1.top/wwj/site/soft/2025/06/12/20250612160830605.webp)
错误一:[ERR] 1067 - Invalid default value for 'comment_date'
这是导致整个导入过程失败的根本原因。
问题分析
- 原因: MySQL 8.0 对日期时间类型的默认值要求比 5.7 更严格。在 MySQL 5.7 及更早版本中,你可以为
DATETIME
或TIMESTAMP
类型的字段设置一个'0000-00-00 00:00:00'
的无效日期作为默认值。然而,在 MySQL 8.0 中,默认的sql_mode
包含了NO_ZERO_DATE
和NO_ZERO_IN_DATE
模式,这两种模式禁止使用 ‘0000-00-00’ 作为日期。 - 证据: 在你的 SQL 文件中,
wp_comments
表的创建语句包含了这两行:`comment_date` datetime NOT NULL DEFAULT ‘0000-00-00 00:00:00’,
`comment_date_gmt` datetime NOT NULL DEFAULT ‘0000-00-00 00:00:00’,这正是 MySQL 8.0 无法接受的语法。
解决方案
你有两种解决方案,强烈推荐第一种。
方案一 (推荐): 修改 SQL 文件
这是最干净、最符合未来标准的做法。你只需要在导入之前,用文本编辑器修改一下导出的 .sql
文件。
- 用一个好的文本编辑器(如 VS Code, Sublime Text, Notepad++ 等)打开你的
.sql
文件。 - 使用“查找和替换”功能:
- 查找内容:
DEFAULT '0000-00-00 00:00:00'
- 替换为:
DEFAULT CURRENT_TIMESTAMP
或者DEFAULT '1970-01-01 00:00:01'
- 解释:
CURRENT_TIMESTAMP
: 是一个有效的默认值,表示如果插入时未指定时间,则使用当前时间。对于大多数应用场景是合理的。'1970-01-01 00:00:01'
: 是一个有效的“哨兵”或“占位符”日期,如果你想保留一个表示“未设置”的特定旧日期,可以使用这个。- 对于 WordPress 的
wp_comments
表,使用CURRENT_TIMESTAMP
通常是安全的。
- 查找内容:
- 保存修改后的
.sql
文件,然后重新尝试导入。
方案二 (不推荐,但可行): 修改 MySQL 8.0 服务器配置
这个方法是让你的新数据库去兼容旧的、不规范的语法,可能会掩盖其他潜在问题。只建议作为临时解决方案。
- 连接到你的 MySQL 8.0 服务器。
- 查看当前的
sql_mode
:SELECT @@GLOBAL.sql_mode; - 你会看到一长串值,其中可能包含
NO_ZERO_IN_DATE
和NO_ZERO_DATE
。 - 修改
sql_mode
,从中移除这两个值。例如,如果原来的值是ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
,你可以执行:SET GLOBAL sql_mode = ‘ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION’; - 注意:
SET GLOBAL
只对新建立的连接生效。你需要断开当前连接并重新连接,或者为当前会话设置:SET SESSION sql_mode = ‘ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION’; - 修改配置后,再尝试导入你的 SQL 文件。
总结
- 核心问题: MySQL 8.0 不再接受
'0000-00-00 00:00:00'
作为DATETIME
的默认值。 - 最佳操作:
- 打开你的
.sql
导出文件。 - 将所有
DEFAULT '0000-00-00 00:00:00'
替换为DEFAULT CURRENT_TIMESTAMP
。 - 保存文件。
- 重新导入到 MySQL 8.0.28 中。
- 打开你的
- 结果: 导入将会成功,两个错误都会消失。
© 版权声明
THE END