MySQL:5.7、8.0 日期时间支持 0000-00-00 格式

此文章发布于 13 个月前,部分信息可能已经过时,请自行斟酌确认。

MySQL 5.7 之前的数据库的 datetimestamp 等时间类型默认为 0000-00-00
升级到 MySQL 5.7 后这样的日期格式默认不支持会报错。

解决方案1

不要再使用 0000-00-00 这样的日期。

解决方案2

如果还想用 0000-00-00 这样的格式,那么需要修改 SQL_Mode

MySQL 5.7 默认的 sql mode 如下:

ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, and NO_ENGINE_SUBSTITUTION

其中 NO_ZERO_IN_DATENO_ZERO_DATE 两个选项禁止了 0000 这样的日期和时间。
因此在 mysql 的配置文件中,重新设置 sql-mode,去掉这两项就可以了。

查看现在的 sql_mode:

select @@global.sql_mode

永久修改:

提示:在 sql 中修改 @@global.sql_mode 发现重服务后会还原,所以我们改配置文件

vim /etc/mysql/mysql.conf.d/mysqld.conf
[mysqld]
# 其它配置
sql_mode = "ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
最后修改:2021 年 10 月 07 日 09 : 20 AM
如果觉得我的文章对你有用,请随意赞赏

发表评论