记得是将mysql5.6+的数据库导入的mysql5.7+中,出现了ERROR 1067 (42000): Invalid default value for 'end_time',
表示的是表中的timestamp不符合sql_mode的规则。
问题原因:
1、表中的第一个timestamp如果没有设置默认为NULL,或者没有default,或者update字句,则自动分配default_current_timestamp和on update current_timestamp两个属性;
2、之后其他字段的timestamp字段,如果没有设置默认为NULL,或者是default字句,将自动分配为default(0000-00-00 00:00:00)零时间戳,不满足sql_mode中的NO_ZERO_DATE而报错。
注:sql_mode中有两种,一种是空值,一种是严格模式,mysql5.7以后的默认使用严格模式,NO_ZERO_DATE设置该值则不允许插入的0日期,否则或报时间不能为0的错误。
结局方法:
第一种: select @@SQL_MODE,然后将查询出来的去掉NO_ZERO_DATE
SET SQL_MODE = '去掉之后的值'。
该方法只在当前的回话中的生效。(重新打开个命令窗口,SQL_MODE被还原)
第二种:select @@global.sql_mode ,将查询出的去掉NO_ZERO_DATE
SET GLOBAL SQL_MODE = '去掉之后的值',
该方法只在当前服务中生效,当重启mysql服务后,则SQL_MODE 被还原。