MySQL5.7插入数据错误Field doesn’t have a default value

这阵子将公司一测试项目迁移到了本地,原项目数据库使用的是阿里云 RDS – MySQL 5.7,本地则采取的为自编译构建安装MySQL 5.7版本。今天项目的开发小伙伴就反应程序之前运行正常的SQL语句出现报错现象。

经查看,执行错误的SQL为INSERT语句,报错为 Field ’xx‘ doesn’t have a default value。

报错很明显,那我们就看下操作表结构错误所在字段,果然设置为 NOT NULL,但未配置DEFAULT值:

但其在RDS上执却是成功的,于是立马想到跟数据库的 sql_mode 有关;果然在RDS中,sql_mode被设置为空:

而在MySQL的启动配置文件my.cnf中未做明确配置时,启动后会自动设置为默认设置:

经过进一步查找,是跟一个名为 STRICT_TRANS_TABLES 的模式有关,其官方解释为:

于是在sql_mode中将其去除后即可执行成功:

Tips:正常情况下,应该是规范表结构语句,但这边项目已经成型,要做修改势必会做很大改动,影响较大,故修改sql_mode即可。

发表评论

error: Content is protected !!