關於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小時這也就解釋了資料庫時間的由來
資料庫中:
實際介面顯示的: