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

06-01 1238阅读

项目场景:

数据库环境 :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’, , )

修复后没有再次报错。

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

目录[+]

取消
微信二维码
微信二维码
支付宝二维码