首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
SAAS
ToB门户
了解全球最新的ToB事件
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
微博
Follow
记录
Doing
博客
Blog
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
排行榜
Ranklist
相册
Album
应用中心
qidao123.com技术社区-IT企服评测·应用市场
»
论坛
›
软件与程序人生
›
后端开发
›
Java
›
排查系统执行SQL与数据库直接执行结果不一致的问题 ...
返回列表
发新帖
排查系统执行SQL与数据库直接执行结果不一致的问题
[复制链接]
发表于 2023-3-3 17:37:37
|
显示全部楼层
|
阅读模式
目录
现象
解决
过程
结论
现象
系统根据指定的日期范围(LocalDateTime)查询
数据库
,结果与直接将SQL语句查询不一致,系统查询的并不是期望日期范围的数据。
通过 LocalDateTime、LocaDate、LocalDate 作为时间插入数据时,时间不对
解决
更换 mysql 的驱动包
版本
在 8.0.22及以上
官网bug说明:
https://dev.mysql.com/doc/relnotes/connector-j/8.0/en/news-8-0-22.html
注意:考虑到规范问题,8.0.31的时候驱动包的坐标调整了!!!
8.0.31 之前maven坐标8.0.31 及以后maven坐标groupId: mysql
artifactId: mysql-connector-javagroupId: com.mysql
artifactId: mysql-connector-j
过程
上线之后,通过定时任务生成的报表数据有很明显的异常,用户报故
在本地环境进行 debug 时,发现查询出来的结果列表和期望值不一样
开启了 mybatis 的sql
日志
打印,将
日志
打印在控制台,将其拿到
数据库
执行,结果与应用查询得到的数据量不同
怀疑过是 LocalDateTime 转换问题、MP问题、应用时区问题,debug 证明不是
祭出度娘,找到了
https://www.cnblogs.com/ingxx/p/13476718.html
,进而定位到了是
数据库
驱动问题
原文说的是8.0以上都有时区问题,之后就是各种测试,发现并不是所有8以上
版本
都有问题,然后就是二分法找到没有此问题的
版本
(8.0.22)
之后官网找到了bug修复说明
https://dev.mysql.com/doc/relnotes/connector-j/8.0/en/news-8-0-22.html
结论
一切的源头都是因为我将 springboot 从 2.5.8 升级为了 2.7.8,并且在mysql驱动8.0.31的时候考虑到规范问题,修改了坐标!!!
在 spring-boot-dependencies 2.5.8 的时候,依赖的mysql驱动包版本为 8.0.27,在 2.7.8 的时候,依赖的mysql驱动包版本为 8.0.32;
升级之后,编译的时候出现如下错误:
所以就很简单的增加了一个版本 8.0.13 之后程序就能正常启动,但是却存在着上述问题
正确的做法应该是删除旧的仓库坐标,添加新的驱动坐标:
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
</dependency>
复制
代码
万事有因,当问题排查出来并且解决的时候,是真的舒服~
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
继续阅读请点击广告
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
×
回复
使用道具
举报
返回列表
王柳
+ 我要发帖
×
登录参与点评抽奖,加入IT实名职场社区
去登录
微信订阅号
微信服务号
微信客服(加群)
H5
小程序
快速回复
返回顶部
返回列表