从低版本的mysql导入到5.7以后的mysql会出现的问题,ERROR 1067 (42000): Invalid default value for 'xxx'

记得是将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 被还原。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值