mysql不能使用0000-00-00 00:00:00作为默认值

在 MySQL 中为 DATE 或 DATETIME 数据类型的列设置默认值时,如果使用 ‘0000-00-00 00:00:00’ 作为默认值,则可能会遇到以下错误:

ERROR 1067 (42000): Invalid default value for 'column_name'

或者在插入值时:

ERROR 1292 - Incorrect date value: '0000-00-00' 

原因是,从 5.7 版开始,MySQL 默认启用 SQL 严格模式,并且不允许将“0000-00-00”作为有效日期值。

根据MySQL 5.7参考手册:

MySQL 5.7中默认的SQL模式包括以下模式:仅完整的分组方式、严格的转换方式、无零的输入日期、无零的日期、按零划分的错误、无自动创建用户和无引擎替换。

由于0000-00-00 00:00:00不是有效的日期时间值,因此数据库已损坏。这就是为什么MySQL 5.7——默认情况下没有启用零日期模式——在尝试执行写操作时会输出错误。

解决此问题的步骤:

1.检查MySQL模式

您可以从 MySQL 配置文件中查看 SQL 模式或运行以下命令:

SELECT @@GLOBAL.sql_mode global, @@SESSION.sql_mode session

2.禁用严格模式

如果启用了严格模式,一个或两个STRICT_TRANS_TABLESSTRICT_ALL_TABLES启用。因此,您可以通过从 MySQL 配置文件中注释掉它或运行以下命令来禁用它:

或者

SET GLOBAL sql_mode = '';

3.重启MySQL

然后重新启动 MySQL,您应该能够使用 ‘0000-00-00’ 作为 DATE 或 DATETIME 列的值。

完整的mysqldump指南(附示例)
巧用 MySql的CURRENT_TIMESTAMP

发表我的评论

电子邮件地址不会被公开。 必填项已用*标注

92 + 31 =

ajax-loader