現象 系統根據指定的日期範圍(LocalDateTime)查詢資料庫,結果與直接將SQL語句查詢不一致,系統查詢的並不是期望日期範圍的數據。 通過 LocalDateTime、LocaDate、LocalDate 作為時間插入數據時,時間不對 解決 更換 mysql 的驅動包版本在 8.0.22及以 ...
目錄
現象
- 系統根據指定的日期範圍(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-java |
groupId: 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;
升級之後,編譯的時候出現如下錯誤:
所以就很簡單的增加了一個版本
正確的做法應該是刪除舊的倉庫坐標,添加新的驅動坐標:
<!-- 版本號已由 springboot 自動配置 -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
</dependency>
萬事有因,當問題排查出來並且解決的時候,是真的舒服~
本文來自博客園,作者:君子如珩~,轉載請註明原文鏈接:https://www.cnblogs.com/shulipeng/p/17176416.html