原因是因为设置了 NO_ZERO_IN_DATE
查看当前数据库全局sql_mode的值
select @@global.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
更新全局sql_mode的值,去除原值当中的 NO_ZERO_IN_DATE、NO_ZERO_DATE
set @@global.sql_mode = (select replace(@@global.sql_mode,'NO_ZERO_IN_DATE,NO_ZERO_DATE',''));
- NO_ZERO_IN_DATE:
在严格模式,日期中不接受月或日部分为0。如果使用IGNORE选项,插入日期'0000-00-00',在非严格模式,可以接受该日期,但会生成警告。 - NO_ZERO_DATE:
在严格模式, '0000-00-00'为不合法日期。如果使用IGNORE选项插入零日期,在非严格模式,可以接受该日期,但会生成警告。
sql_mode = ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
参考文章:
- https://www.jianshu.com/p/db1ad3e07e2b 》Mysql Error:Invalid default value for 'xxx' 解决方案
- https://blog.csdn.net/u010947949/article/details/89532192 》mysql的sql_mode关于date的两个参数值NO_ZERO_DATE和NO_ZERO_IN_DATE