无法导入SQL文件,咨询报错含义及pubdate字段异常原因
MySQL导入旧项目SQL文件
pubdate字段报错解决方案 pubdate字段报错为新旧版本MySQL的SQL模式兼容性问题:
早年低版本MySQL(5.6及更早)默认允许日期类型字段使用0000-00-00 00:00:00这类零值作为默认值,高版本MySQL(5.7及之后)默认开启NO_ZERO_DATE、NO_ZERO_IN_DATE严格校验规则,禁止非法零值日期写入,就会触发对应的报错。
方案1:临时调整SQL模式完成导入
适合不想修改原SQL文件的场景:
- 导入前先在数据库执行命令:
SET sql_mode = ''; - 执行SQL导入操作
- 导入完成后可执行以下命令恢复默认校验规则(可选):
如果你用phpMyAdmin等可视化工具导入,直接在导入页面的「SQL模式」输入框留空再导入即可。-- MySQL 8.0 版本用这个 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'; -- MySQL 5.7 版本用这个 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO';
方案2:修改原SQL文件的字段定义,一劳永逸
适合后续还要多次导入该SQL的场景:
- 打开SQL文件,找到
pubdate字段对应的建表语句,原有写法大概率为:`pubdate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' - 根据业务需求修改为合法定义即可:
- 如果允许该字段为空,改成:
pubdatedatetime NULL DEFAULT NULL - 如果要求非空,改成合法默认值:
pubdatedatetime NOT NULL DEFAULT '1970-01-01 08:00:00'
- 如果允许该字段为空,改成:
内容的提问来源于stack exchange,提问作者daladn0
相关产品推荐
相关产品推荐

