關於MySQL存入的時間和取出時間不一致的解決


場景:代碼運行在Linux-A上,new Date() 生成的時間比當前時間早13個小時,導致存入數據庫內的時間也早13個小時,但前台讀取展示出來的時間又是正常的。在數據庫直接select now()測試出來的時間也是比當前時間早13個小時。

 

分析:

問題一:Linux-B上的MySQL數據庫內的時間設置有問題

問題二:Linux-A上代碼new Date()出來的時間有問題
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

遇到這樣一個問題,Mysql的時區,沒有設置,默認是時區是0,在java代碼中對應的字段類型是TimeStamp,mysql字段類型也是TimeStamp

項目A

代碼中獲取到的時間 是正確的。
寫到數據庫的時間也是對的。
從數據庫讀取出來時間是正確的
項目B

代碼中獲取的時間是對的
寫到數據庫的時間,慢8小時
從數據庫讀取出來時間,卻是正確的。(也就是說比數據庫中的時間快8小時)
原因:
經過不斷的嘗試,探索終於發現時mysql-connector-java的版本問題,項目A使用的版本是5.1.41,項目B使用的8.0.11。寫入數據時,8.0這個版本會自動根據,傳入時間的時區和mysql的時區,自動把時間進行調整

服務器的mysql版本是5,如果服務器的mysql版本是8,則項目不能使用5版本的mysql-connector-java庫。

 

查看mysql當前時間和時區

select CURTIME()或者select now()也行

show variables like "%time_zone%";

顯示

time_zone說明mysql使用system的時區,system_time_zone說明system使用UTC時區

 

UTC時區比中國慢8小時這也就解釋了數據庫時間的由來

數據庫中:

 

實際界面顯示的:

 


免責聲明!

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



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