首页 > 数据库 >排查系统执行SQL与数据库直接执行结果不一致的问题

排查系统执行SQL与数据库直接执行结果不一致的问题

时间:2023-03-03 17:46:37浏览次数:50  
标签:8.0 SQL connector 排查 坐标 mysql 问题 执行 com

目录

现象

  1. 系统根据指定的日期范围(LocalDateTime)查询数据库,结果与直接将SQL语句查询不一致,系统查询的并不是期望日期范围的数据。
  2. 通过 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-java
groupId: com.mysql
artifactId: mysql-connector-j

过程

  1. 上线之后,通过定时任务生成的报表数据有很明显的异常,用户报故

  2. 在本地环境进行 debug 时,发现查询出来的结果列表和期望值不一样

  1. 开启了 mybatis 的sql日志打印,将日志打印在控制台,将其拿到数据库执行,结果与应用查询得到的数据量不同

  2. 怀疑过是 LocalDateTime 转换问题、MP问题、应用时区问题,debug 证明不是

  3. 祭出度娘,找到了 https://www.cnblogs.com/ingxx/p/13476718.html,进而定位到了是数据库驱动问题

  4. 原文说的是8.0以上都有时区问题,之后就是各种测试,发现并不是所有8以上版本都有问题,然后就是二分法找到没有此问题的版本(8.0.22)

  5. 之后官网找到了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 之后程序就能正常启动,但是却存在着上述问题

正确的做法应该是删除旧的仓库坐标,添加新的驱动坐标:

<!-- 版本号已由 springboot 自动配置 --> 
<dependency>
     <groupId>com.mysql</groupId>
     <artifactId>mysql-connector-j</artifactId>
</dependency>

万事有因,当问题排查出来并且解决的时候,是真的舒服~

标签:8.0,SQL,connector,排查,坐标,mysql,问题,执行,com
From: https://www.cnblogs.com/shulipeng/p/17176416.html

相关文章

  • mysql inndb
    执行一个表的脚本时提示:导入mysql数据表时出现错误:error"Rowsizetoolarge(>8126).ChangingsomecolumnstoTEXTorBLOBorusingROW_FORMAT=DYNAMICorROW_......
  • Docker配置mysql
    1.宿主机创建对应目录mkdir-p/data/dockers/mysqlcd/data/dockers/mysql#创建数据目录mkdirdata#创建配置目录mkdirconfig#创建日志目录mkdirlog2.创建......
  • # PYTHON执行SQL语句操作MySQL数据库软件
    PYTHON执行SQL语句操作MySQL数据库软件准备安装第三方包PyMySQL创建到MySQL的数据库链接#例frompymysqlimportConnection#获取到MySQL数据库的链接对象conn=......
  • mysql select into outfile默认文件保存路径是C:\ProgramData\MySQL\MySQL Server
    找到my.ini,修改usecure_file_priv=''然后保存并且退出。重启mysql正确的解决方法是:搜索“服务”并进入:下拉找到Mysql左上角处可以进行重启动。如果以后想要通......
  • 【MySQL速通篇001】5000字吃透MySQL部分重要知识点
    ......
  • mysql数据库改变编码
    SELECTTABLE_SCHEMA   '数据库',    TABLE_NAME    '表',    COLUMN_NAME    '字段',    CHARACTER_SET_NAME'原字符......
  • MySQL随笔
    函数:一、时间类ps:可以使用now()获取当前系统时间①DATE_SUB:获取时间A前B天的时间用法:date_sub(A,INTERBALBunit)②DATE_FORMAT:时间格式化,将A转化成'%Y-%m-%d'的......
  • Winform中在Program.cs中初始化的变量(Sqlite连接实例)等再Form1.cs中访问
    场景部分场景下需要在Winform启动时执行一些初始化的操作。比如这里的执行创建Sqlte数据库和表的操作,为了操作数据库封装了工具类,这个工具类实例怎样在其他页面比如Form......
  • SqlServer基礎
    REVERSE(欄位)反轉CHARINDEX(篩選字符,欄位,[start])例:CHARINDEX('/',ProImage,13)從13位查詢/所在索引SUBSTRING(欄位,start,end)例:SUBSTRING(ProImage,0,CHARINDEX('/......
  • mysql中union的用法[转载]
     https://blog.csdn.net/qq_45148387/article/details/116357408?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-11......