在 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_TABLES
或STRICT_ALL_TABLES
启用。因此,您可以通过从 MySQL 配置文件中注释掉它或运行以下命令来禁用它:
或者
SET GLOBAL sql_mode = '';
3.重启MySQL
然后重新启动 MySQL,您应该能够使用 ‘0000-00-00’ 作为 DATE 或 DATETIME 列的值。
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/254173.html