MySQL JDBC Driver 8.0+設置服務器時區


遇到一個問題,線下環境測試數據的查詢完全沒有問題,但是線上環境卻沒法查詢出數據,並且從mybatis輸出的日志來看,查詢參數也沒有問題,數據庫中數據也是存在的,查詢參數類型是java.util.Date

而且mybatis還很迷的輸出了這么一句Total: 1 ,這行日志是在對mybatis開啟DEBUG才會輸出的

於是,想破了頭,一心想着是不是mybatis在查詢結果后,從查詢結果集到實體類的映射出了什么問題?

但是又很懷疑,因為並沒有任何異常拋出來

期間想到要不用下BTrace,后來還是決定把mybatis源碼過一遍看看,畢竟,即便使用BTrace,也要知道從哪里入手來排查

吭呲吭呲的啃了一天多,mybatis太缺少注釋,看起來是真的難

找到了沒有查到結果但是日志又輸出 Total: 1的原因,給mybatis提了個Issue

最后發現從代碼看不出問題(主要還是不精)

最后還是指望BTrace這些玩意了

然后看到說阿里的Arthas比較好用些,最后就用了下,挺不錯的

然后最后跟蹤的結果就是,實際查詢時使用的時間和我程序計算的時間不一樣,小了十三個小時,我就猜到可能是這個原因了

最后給JdbcURL加上了serverTimezone=Aisa/Shanghai,問題解決了

這里要說的是,如果你使用的MySQL JDBC Driver版本在8.0及以上,一定要設置這個

一般來說,如果MySQL服務器設置了時區信息,應該是沒問題的

show variables like '%time_zone%'; 這樣來查看MySQL服務器設置的時區信息

不過如果沒有設置,就可能出現不同的環境,產生這種不易發現的問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM