背景
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'; 只會修改當前會話的時區,停止會話就失效。