mysql查出來的時間跟數據庫相差13/14小時


背景

mysql查出來的時間跟數據庫相差13/14小時,寫入的時間跟數據庫也相差13/14小時。

問題原因

  • 查看時區:
    在mysql中執行以下命令:
SHOW VARIABLES LIKE '%time_zone%';

查詢結果如下:

可以看到時區使用的是 CST,而 CST 是一種混亂的時區。它可以有多種表現:

美國中部時間 Central Standard Time (USA) UTC-05:00 / UTC-06:00
澳大利亞中部時間 Central Standard Time (Australia) UTC+09:30
中國標准時 China Standard Time UTC+08:00
古巴標准時 Cuba Standard Time UTC-04:00

Java和Mysql協商時區時把Mysql的CST時間當成了美國中部時間即UTC-5(美國從“3月11日”至“11月7日”實行夏令時,美國中部時間改為 UTC-05:00,其他時候是UTC-06:00)。我們國家是UTC+08:00 時區,所以差了13/14個小時

解決方法:

  • 第一種:

在項目的jdbc配置中,加入時區 &useTimezone=true&serverTimezone=GMT%2B8
示例如下:

jdbc:mysql://主機名:3306/庫名?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&useTimezone=true&serverTimezone=GMT%2B8
  • 第二種:
##修改mysql全局時區為北京時間,即我們所在的東8區
set global time_zone = '+8:00'; 
flush privileges;

如果使用 set time_zone = '+8:00'; 只會修改當前會話的時區,停止會話就失效。

參考資料:

https://juejin.cn/post/6844903476225376264


免責聲明!

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



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