Mysql ERROR 1067: Invalid default value for ‘date’ 解决
在执行sql建表脚本时,出现了“invalid default value for ‘end_date’ ”错误,导致脚本执行失败。
mysql5.7对sql_mode的设置比mysql5.6更严格了
`date` date NOT NULL DEFAULT '0000-00-00',
mysql5.6默认的sql_mode:
NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
mysql5.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,NO_ENGINE_SUBSTITUTION
其中 NO_ZERO_IN_DATE,NO_ZERO_DATE 两个参数使得时间或日期参数 不得 使用0作默认值,也就是上面的sql中 “default ‘0000-00-00 00:00:00’ ”是不被允许的,所以导致该错误提示。
可以通过 select @@sql_mode; 查看自己的mysql设置的sql_mode的值。
既然是那两个sql_mode参数导致的问题,那就将两个参数去掉就好了。在默认的sql_mode参数去除[NO_ZERO_IN_DATE,NO_ZERO_DATE]
临时解决
set SQL_MODE = 'STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
永久解决
set GLOBAL sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
或者