Mysql疑难报错排查 - Field ‘XXX‘ doesn‘t have a default value

Mysql疑难报错排查 - Field ‘XXX‘ doesn‘t have a default value

码农世界 2024-06-08 后端 90 次浏览 0个评论

项目场景:

数据库环境 :mysql8;

工程使用:MyBatisPlus

表情况:

Mysql疑难报错排查 - Field ‘XXX‘ doesn‘t have a default value


问题描述

某一个插入语句使用了 MyBatisPlus 的 save 方法,因为end_time1 end_time2都并没有值,所以在MyBatisPlus默认情况下,并不会在插入语句中提及,

最终提取其SQL: INSERT INTO aaaa (serial_no, business_date, market_no, report_code)

VALUES (31, 20230704, 1, ‘688610’)

结果报错 Field 'end_time1' doesn't have a default value。

Mysql疑难报错排查 - Field ‘XXX‘ doesn‘t have a default value

一般情况下,这种报错是表设置成非空字段,我们又没设置默认值导致的。但是这里我们明明表中设置了可空。而且该场景为偶现,我们单独把SQL提取出来执行又是可以的,排查数小时无果。


原因分析:

偶现,目前无法查出其原因,可能需要去Mysql源码来看原因了


解决方案:

既然说的是没有默认值,那我们就在插入的时候指定传null 进去即可,由于MyBatisPlus的特性,所以最终在DBclass层,为end_time1和end_time2都设置为null 也插入和更新

Mysql疑难报错排查 - Field ‘XXX‘ doesn‘t have a default value

该参数的运行原理可见往期博文《MybatisPlus 构造器wrapper的使用与原理》 中的“易错点-null处理”小节

最终生成的SQL如下:

INSERT INTO aaaa ( serial_no, business_date,

market_no, report_code, end_time1, end_time2 ) VALUES ( 63, 20230704,

1, ‘688610’, , )

修复后没有再次报错。

转载请注明来自码农世界,本文标题:《Mysql疑难报错排查 - Field ‘XXX‘ doesn‘t have a default value》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,90人围观)参与讨论

还没有评论,来说两句吧...

Top