mysql5.7以上版本,表字段设置NOT NULL DEFAULT CURRENT_TIMESTAMP后,该字段传入null时保存时报错

预期:字段传入为null,仍能insert、update成功,且时间为当前时间。

实际:后端报错,不可为空

原因分析:

执行:show VARIABLES like "sql_mode";

发现为:STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION

指定数据库操作为严格模式,也就是哪怕设置了default值,该字段为not null。操作数据库为null时,也不会走default,会直接报错不可为空。

 

此时发现解决方案就是修改配置,网上好几种修改方式,我们采取的是修改my.cnf文件

注释掉5.7的默认的配置

#sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

#开启查询缓存

#explicit_defaults_for_timestamp=true

重启数据库,重启服务。

问题修复。

你可能感兴趣的:(数据库,mysql)