最近在导出mysql 5.6的数据库到mysql 8.0的时候,导入成功了,但是修改表结构的时候,发现提示错误信息:Incorrect datetime value: ‘0000-00-00 00:00:00’ for column '……
后来经过查找资料,发现由于mysql的版本为5.7.1,部分功能已经升级,导致在datetime数据类型的影响下出现错误,之前datetime字段为’0000-00-00 00:00:00’的,修改就会报这个错误。
select @@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,NO_ENGINE_SUBSTITUTION
原因:
NO_ZERO_IN_DATE,NO_ZERO_DATE是无法默认为‘0000-00-00 00:00:00’的根源。
NO_ZERO_IN_DATE:在严格模式下,不允许日期和月份为零
NO_ZERO_DATE:设置该值,mysql数据库不允许插入零日期,插入零日期会抛出错误而不是警告。
解决方案:
方法一:
去掉NO_ZERO_IN_DATE,NO_ZERO_DATE
执行SET GLOBAL sql_mode=‘ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION’;
方法二:
打开my.ini,找到sql-mode=""(最下面),紧靠着; sql-mode=“STRICT_ALL_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ZERO_DATE,NO_ZERO_IN_DATE,NO_AUTO_CREATE_USER”,添加sql-mode=“NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION”; 注意前面没有分号(注释)。
重启mysql服务就好了