当前位置: 首页 > news >正文

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

项目场景:

数据库环境 :mysql8;
工程使用:MyBatisPlus
表情况
在这里插入图片描述


问题描述

某一个插入语句使用了 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
在这里插入图片描述
一般情况下,这种报错是表设置成非空字段,我们又没设置默认值导致的。但是这里我们明明表中设置了可空。而且该场景为偶现,我们单独把SQL提取出来执行又是可以的,排查数小时无果。


原因分析:

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


解决方案:

既然说的是没有默认值,那我们就在插入的时候指定传null 进去即可,由于MyBatisPlus的特性,所以最终在DBclass层,为end_time1和end_time2都设置为null 也插入和更新
在这里插入图片描述
该参数的运行原理可见往期博文《MybatisPlus 构造器wrapper的使用与原理》 中的“易错点-null处理”小节

最终生成的SQL如下:

INSERT INTO aaaa ( serial_no, business_date,
market_no, report_code, end_time1, end_time2 ) VALUES ( 63, 20230704,
1, ‘688610’, , )

修复后没有再次报错。

相关文章:

  • 勒索软件分析_目标文件扫描行为分析
  • Dockershim 与 Containerd:两种容器运行时的故事
  • 【CMake系列】10-cmake测试 ctest
  • web学习笔记(六十二)
  • 黄仁勋在ComputeX 2024演讲:英伟达发布三款新芯片计划,挑战摩尔定律
  • 机器学习_正则化方法
  • Qt——前言
  • 推荐一些有趣实用的网站
  • 【Python数据挖掘实战案例】机器学习LightGBM算法原理、特点、应用---基于鸢尾花iris数据集分类实战
  • 安卓SystemServer进程详解
  • SqlServer2016企业版安装
  • docker和docker-compose的安装
  • 阿里云对象存储oss——对象储存原子性和强一致性
  • 测试记录3:WLS2运行Linux界面
  • [沫忘录]MySQL InnoDB引擎
  • nodejs 获取服务器文件夹里面图片,并前端进行幻灯展示
  • MBedTLS v3.6.0 长期支持 (LTS) 版本
  • Elasticsearch:6.x 处理一对多关系使用场景
  • LLM的基础模型5:Embedding模型
  • Java物业管理系统+数据库应用程序开发[JavaSE+JDBC+idea控制台+MySQL]
  • 新华时评:任凭风云变幻,中俄关系从容前行
  • “穿越看洪武”,明太祖及其皇后像台北故宫博物院南园展出
  • 李翔宁:城市的每个人都参与了上海的建造,这一过程还在持续
  • 解放军仪仗司礼大队仪仗分队参加纪念苏联伟大卫国战争胜利80周年阅兵活动
  • 全国铁路迎来返程客流高峰,预计今日发送2040万人次
  • 日本来信|劳动者的书信④