解决MySQL 5.6升5.7之后,非空有默认值的字段,报cannot be null Column ‘xxx‘的问题

背景

项目需要升级MySQL版本,打算5.6升5.7,升级后发现原本正常的部分SQL,不能正常工作。
字段定义为

created_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP

在之前的使用中,有的同事代码不规范,向此字段插入时,会直接插入null,而非不更新此字段的值
如下为错误写法:

INSERT INTO demo_table(name, email, created_time) VALUES ('alice', 'alice@gmail.com', null)

如下为正确写法:

INSERT INTO demo_table(name, email) VALUES ('alice', 'alice@gmail.com')

原因及解决方案

在MySQL5.6版本中,插入null,可自动填入默认值CURRENT_TIMESTAMP,而MySQL5.7的默认行为不一样,会直接报错cannot be null Column 'created_time'

解决方案:MySQL5.7引入了一个配置:explicit_defaults_for_timestamp, 默认是OFF,改为ON即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值