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服務器設置的時區信息

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章