【轉】Java時間比數據庫時間早8小時,設置 serverTimezone=Asia/Shanghai


前段時間把項目 SpringBoot 版本提高了,提高到了 2.1.7,之前版本不記得了。項目所有表都添加了 create_time 和 update_time 字段,並設置默認值為 CURRENT_TIMESTAMP。 有一天無意間發現網頁上顯示的時間,比如用戶登錄時間和數據庫里顯示不一樣,頁面上的早了幾個小時。比如 當前時間是 2019-10-19 18:12:43,數據庫時間也是 2019-10-19 18:12:43;但是頁面缺顯示 2019-10-20 02:12:43。 多對比幾組時間分析,發現 Java 的時間總比數據庫的早 8 個小時。  

問題原因

導致整個問題的原因是之前的 mysql-connector-java 依賴沒有指定版本,默認跟隨 spring-boot-dependencies 里的版本,因為之前 springboot 版本相對低點,所以驅動版本是 5.1,沒有暴露問題 但是升級到 2.1.7 后,里面默認指定 mysql-connector-java 版本為 8.0.17,這個我之前其實是知道的,springboot 高版本里的默認依賴都會相對更高。 總來來說:問題在 MySQL8.0的驅動包跟之前不一樣了,默認時區是全球統一時間 (UTC),北京時間是 UTC+8。  

解決辦法

解決辦法很簡單,在 jdbc 驅動的 url 上加上 serverTimezone=Asia/Shanghai 如果不加 serverTimezone 或設置為 UTC 都是差 8 個小時,設置成為上海的時區就行(serverTimezone=GMT%2B8)。


免責聲明!

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



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