项目场景:
mysql插入数据时报错
mysqlt版本:5.7.29
问题描述:
sql语句
INSERT INTO `list_info`(`id`, `app`, `status`, `createdAt`, `updatedAt`) VALUES ('43c689bc-9632-4af3-9b5a-78a12160adee', 'rec_user_login', 0, NULL, NULL);
createdAt和updatedAt在数据库的表结构如下
按正常情况下,传入null时,会自动按默认值来处理的。即默认是当前时间。
这个在测试数据库已经证实了,这个错误是在生产环境出现的。
原因分析:
因为有两个环境,测试环境和生产环境,测试环境正常,生产环境不正常,那么就采用对比法,对比两个环境有啥不一样?
首先,Mysql版本一模一样
其次,查到了sqlmode,在这个上面花费了大量时间尝试,最终都没有解决。
最后查明是explicit_defaults_for_timestamp参数的原因。
show variables like 'explicit_defaults_for_timestamp'
上面是生产环境的配置,是ON,测试环境是OFF的。
解决方案:
设置为OFF
SET session explicit_defaults_for_timestamp = off;
实际操作时,遇到这个错误,是因为目前我的账号权限不足。云服务商没有给root权限,只能提交工单,让客服修改了,最终结果待修改后再测试。