問題描述
公司使用的阿里雲數據庫服務器,插入時間與實際時間差 13 個小時
執行 show variables like "%time_zone%";
結果如下:
Variable_name | Value |
---|---|
system_time_zone | CST |
time_zone | SYSTEM |
原因
CST 的時區是一個很混亂的時區,在與 MySQL 協商會話時區時,Java 會誤以為是 CST -0500,而非 CST +0800,詳見 一次 JDBC 與 MySQL 因 “CST” 時區協商誤解導致時間差了 14 或 13 小時的排錯經歷
解決方法
因此數據庫為正式環境數據庫,亦有其他程序正在使用,故在數據庫連接字符串添加 &serverTimezone=GMT%2b8
另外一種方法需要修改 MySQL 配置:
[mysqld]
default-time-zone = '+08:00'
參考: