当前位置: 首页 > 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’, , )

修复后没有再次报错。

http://www.lryc.cn/news/364924.html

相关文章:

  • YOLOv8_obb预测流程-原理解析[旋转目标检测理论篇]
  • 02JAVA字符串和集合
  • Qt如何让按钮的菜单出现在按钮的右侧
  • C++的类和new和delete和菱形继承机制
  • Redis教程(二十二):Redis的过期删除和缓存淘汰策略
  • Lodop 实现局域网打印
  • HarmonyOS(二十四)——Harmonyos通用事件之触摸事件
  • 2024-前端面试的正确打开方式(GitHub火爆场景题剖析)
  • Vue3项目炫酷实战,检测密码强度值
  • PHP实现抖音小程序用户登录获取openid
  • Linux进程无法被kill
  • MySQL binlog三种模式
  • 【CentOS 7】挑战探索:在CentOS 7上实现Python 3.9的完美部署指南
  • oracle删除表空间和用户命令
  • 企业微信hook接口协议,ipad协议http,获取未发送群发列表
  • oracle中的INTERVAL函数学习总结
  • 爬虫(没)入门:用 node-crawler 爬取 blog
  • GAMES104笔记
  • ARM功耗管理架构演进及变迁
  • ARM-V9 RME(Realm Management Extension)系统架构之系统能力的设备隔离和保护
  • 如何为律师制作专业的商务名片?含电子名片二维码
  • 方案设计|汽车轮胎数显胎压计方案
  • MySQL学习——选项文件的使用
  • Vulnhub-DC-3
  • docker 停止重启容器命令start/stop/restart详解(容器生命周期管理教程-2)
  • lua字符串模式匹配
  • 【深度学习】温故而知新4-手写体识别-多层感知机+CNN网络-完整代码-可运行
  • ChatGPT 论文翻译指南!解锁高质量翻译的秘密!
  • SQLserver通过CLR调用TCP接口
  • 前复权、后复权,技术分析看哪个?价值投资呢?