You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

导入SQL Dump至Cloud 9遇MySQL 1067错误:date_time默认值无效

解决MySQL导入Dump时的ERROR 1067 (42000): Invalid default value for 'date_time'问题

嘿,作为MySQL新手碰到这个问题太正常了,我来帮你捋清楚怎么搞定它!

这个错误的核心原因是Cloud9上的MySQL会话/全局SQL_MODE设置和你本地的不一样。从MySQL 5.7开始,默认启用了NO_ZERO_DATE和NO_ZERO_IN_DATE这两个严格模式规则,它们不允许date_time字段使用'0000-00-00 00:00:00'这类无效日期作为默认值,而你本地的MySQL可能没开这些限制,所以Dump文件在本地能正常运行。

下面是几个可行的解决办法,你可以选最适合你的:

方法1:临时修改会话级SQL_MODE(快速导入)

先登录Cloud9的MySQL控制台,执行以下命令查看当前的SQL_MODE:

SELECT @@SESSION.sql_mode;

如果结果里包含NO_ZERO_DATE或者NO_ZERO_IN_DATE,就执行这条命令去掉这些限制:

SET SESSION sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

修改完成后,再重新导入你的SQL Dump文件,应该就能成功了。注意这个修改只在当前会话有效,退出MySQL后会恢复原样。

方法2:永久修改全局SQL_MODE(一劳永逸)

如果以后还要导入类似的Dump文件,可以修改MySQL的配置文件:

  1. 打开Cloud9的终端,编辑MySQL配置文件(通常路径是/etc/mysql/my.cnf):
sudo nano /etc/mysql/my.cnf
  1. 在[mysqld]段落里添加或修改sql_mode配置,去掉NO_ZERO_DATE和NO_ZERO_IN_DATE:
[mysqld]
sql_mode = "ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
  1. 保存文件后,重启MySQL服务:
sudo service mysql restart

这样以后所有新的MySQL会话都会使用这个宽松的SQL_MODE,再导入Dump就不会报错了。

方法3:修改Dump文件里的字段定义(最稳妥)

你也可以直接修改SQL Dump文件中history表的date_time字段定义,把默认值改成合法的日期。比如:

  • 如果希望默认值是当前时间,改成:
`date_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP
  • 如果必须保留一个初始默认值,改成一个有效的日期,比如:
`date_time` datetime NOT NULL DEFAULT '1970-01-01 00:00:01'

修改后再导入Dump文件,不管SQL_MODE怎么设置都能正常执行。

补充说明

你本地的MySQL能正常运行,大概率是因为本地的SQL_MODE没有启用那些严格的日期校验规则——可能是本地MySQL版本低于5.7,或者你手动修改过SQL_MODE配置。

内容的提问来源于stack exchange,提问作者Furrukh Jamal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:17:10