數(shù)據(jù)庫時區(qū)問題導(dǎo)致時間顯示異常

起因

今天用Sqlyong客戶端在Tidb數(shù)據(jù)庫(兼容Mysql協(xié)議)里面查詢一些數(shù)據(jù),本來想通過時間字段看看數(shù)據(jù)產(chǎn)生的時間,結(jié)果發(fā)現(xiàn)即便是剛創(chuàng)建的數(shù)據(jù)時間字段也和我當(dāng)前的時間對不上,差了13個小時。

調(diào)查

太奇怪了,于是google了一下資料,原來如果沒有自定義設(shè)置,數(shù)據(jù)庫默認使用的時區(qū)是系統(tǒng)時區(qū),而系統(tǒng)時區(qū)為CST,這個CST又有好多種解釋,分別為如下。

  • 美國中部時間 Central Standard Time (USA) UTC-06:00
  • 澳大利亞中部時間 Central Standard Time (Australia) UTC+09:30
  • 中國標(biāo)準(zhǔn)時 China Standard Time UTC+08:00
  • 古巴標(biāo)準(zhǔn)時 Cuba Standard Time UTC-04:00

當(dāng)JDBC與Mysql服務(wù)器建立連接時,如果我們沒有給JDBC指定時區(qū),JDBC就會取Mysql服務(wù)器的默認時區(qū),也就是CST,而它又把CST理解成了美國中部時間,結(jié)果就使用了美國中部時間的時區(qū),而不是后端系統(tǒng)服務(wù)器的時區(qū)。

解決辦法

  1. 設(shè)置Tidb服務(wù)器的時區(qū)為我們想要的時區(qū),比如UTC+00,或者UTC+08;
  2. 重新配置后端系統(tǒng)連接數(shù)據(jù)庫服務(wù)器的URL,添加參數(shù)serverTimezone=UTC;

總結(jié)

在和數(shù)據(jù)庫打交道的時候一定要注意時區(qū)問題,尤其是針對涉及國際化的業(yè)務(wù)來說,各個服務(wù)器的時區(qū)可能有很大差異,如果不顯示的指定統(tǒng)一的時區(qū),很容易導(dǎo)致混亂。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容