此文章发布于39
个月前,部分信息可能已经过时
,请自行斟酌确认。
MySQL 5.7
之前的数据库的 date
、timestamp
等时间类型默认为 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_DATE
、NO_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"