排查系統執行SQL與資料庫直接執行結果不一致的問題

来源:https://www.cnblogs.com/shulipeng/archive/2023/03/03/17176416.html
-Advertisement-
Play Games

現象 系統根據指定的日期範圍(LocalDateTime)查詢資料庫,結果與直接將SQL語句查詢不一致,系統查詢的並不是期望日期範圍的數據。 通過 LocalDateTime、LocaDate、LocalDate 作為時間插入數據時,時間不對 解決 更換 mysql 的驅動包版本在 8.0.22及以 ...


目錄

現象

  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>

萬事有因,當問題排查出來並且解決的時候,是真的舒服~

本文來自博客園,作者:君子如珩~,轉載請註明原文鏈接:https://www.cnblogs.com/shulipeng/p/17176416.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 數據字典是系統中基本的必不可少的功能,在多種多樣的系統中,數據字典表的設計都大同小異。但是使用方式確是多種多樣,設計好一套易用的數據字典功能模塊,可以使開發事半功倍。 常用的數據字典使用方式: 直接在SQL語句中LEFT JOIN (當然是不推薦這樣用的) 查詢出原始數據,然後再根據原始數據需要的字 ...
  • Hello,Golang 一、開發環境搭建 1. 下載 SDK 1 // Go官網下載地址 2 https://golang.org/dl/ 3 ​ 4 // Go官方鏡像站(推薦) 5 https://golang.google.cn/dl/ 2. 安裝 由於Go語言是一門跨平臺的編譯型語言,我們 ...
  • 環境 odoo-14.0.post20221212.tar Web Controllers Controllers 控制器需要提供可擴展性,就像Model,但不能使用相同的機制,因為先決條件(已載入模塊的資料庫)可能還不可用(例如,未創建資料庫或未選擇資料庫)。 因此,控制器提供了自己的與模型的擴展 ...
  • 簡介 chatgpt-java是一個OpenAI的Java版SDK,支持開箱即用。目前以支持官網全部Api。支持最新版本GPT-3.5-Turbo模型以及whisper-1模型。增加chat聊天對話以及語音文件轉文字,語音翻譯。 開源地址:https://github.com/Grt1228/cha ...
  • 下載安裝包 Prometheus windows_exporter Grafana 下載地址:https://share.weiyun.com/D9sdiWoC 工作原理 Exporter 監控工具,獲取數據 Prometheus 普羅米修斯時序資料庫,用來存儲和查詢監控數據 Grafana 儀錶盤 ...
  • 哈嘍兄弟們,今天我們來試試,如何只用13行代碼,給抖音APP視頻自動點贊! 前因後果 事情是這樣的,昨晚表弟晚上一兩點了,房間燈還亮著,原來是還在用手機刷某音視頻,我搶過手機一看,好家伙,連刷十個都是美女,喜歡列表也全是MM。 我看他手動點贊手都點累了,乾脆熬個夜,給他寫一個自動點贊的代碼,今晚他就 ...
  • MyBatis緩存 mybatis – MyBatis 3 | cache MyBatis 一級緩存全詳解(一) MyBatis 內置了一個強大的事務性查詢緩存機制,它可以非常方便地配置和定製。 為了使它更加強大而且易於配置,我們對 MyBatis 3 中的緩存實現進行了許多改進。 1.一級緩存 1 ...
  • for迴圈 迴圈的作用與分類 作用:讓代碼更加高效的重覆運行 分類:for迴圈和while迴圈 for迴圈結構 for 臨時變數 in 可迭代對象: 重覆執行的代碼1 重覆執行的代碼2 ... 可迭代對象 = 一個容器或者序列 # 遍歷字元串 for i in 'Python': print(i) ...
一周排行
    -Advertisement-
    Play Games
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...
  • 目錄前言PostgreSql安裝測試額外Nuget安裝Person.cs模擬運行Navicate連postgresql解決方案Garnet為什麼要選擇Garnet而不是RedisRedis不再開源Windows版的Redis是由微軟維護的Windows Redis版本老舊,後續可能不再更新Garne ...
  • C#TMS系統代碼-聯表報表學習 領導被裁了之後很快就有人上任了,幾乎是無縫銜接,很難讓我不想到這早就決定好了。我的職責沒有任何變化。感受下來這個系統封裝程度很高,我只要會調用方法就行。這個系統交付之後不會有太多問題,更多應該是做小需求,有大的開發任務應該也是第二期的事,嗯?怎麼感覺我變成運維了?而 ...
  • 我在隨筆《EAV模型(實體-屬性-值)的設計和低代碼的處理方案(1)》中介紹了一些基本的EAV模型設計知識和基於Winform場景下低代碼(或者說無代碼)的一些實現思路,在本篇隨筆中,我們來分析一下這種針對通用業務,且只需定義就能構建業務模塊存儲和界面的解決方案,其中的數據查詢處理的操作。 ...
  • 對某個遠程伺服器啟用和設置NTP服務(Windows系統) 打開註冊表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer 將 Enabled 的值設置為 1,這將啟用NTP伺服器功 ...
  • title: Django信號與擴展:深入理解與實踐 date: 2024/5/15 22:40:52 updated: 2024/5/15 22:40:52 categories: 後端開發 tags: Django 信號 松耦合 觀察者 擴展 安全 性能 第一部分:Django信號基礎 Djan ...
  • 使用xadmin2遇到的問題&解決 環境配置: 使用的模塊版本: 關聯的包 Django 3.2.15 mysqlclient 2.2.4 xadmin 2.0.1 django-crispy-forms >= 1.6.0 django-import-export >= 0.5.1 django-r ...
  • 今天我打算整點兒不一樣的內容,通過之前學習的TransformerMap和LazyMap鏈,想搞點不一樣的,所以我關註了另外一條鏈DefaultedMap鏈,主要調用鏈為: 調用鏈詳細描述: ObjectInputStream.readObject() DefaultedMap.readObject ...
  • 後端應用級開發者該如何擁抱 AI GC?就是在這樣的一個大的浪潮下,我們的傳統的應用級開發者。我們該如何選擇職業或者是如何去快速轉型,跟上這樣的一個行業的一個浪潮? 0 AI金字塔模型 越往上它的整個難度就是職業機會也好,或者說是整個的這個運作也好,它的難度會越大,然後越往下機會就會越多,所以這是一 ...
  • @Autowired是Spring框架提供的註解,@Resource是Java EE 5規範提供的註解。 @Autowired預設按照類型自動裝配,而@Resource預設按照名稱自動裝配。 @Autowired支持@Qualifier註解來指定裝配哪一個具有相同類型的bean,而@Resourc... ...