Java 送出的時間與 MySQL 時間相差13個小時或差14個小時

MySQL 時間相差13或14個小時

Java 送出的時間有設定為台灣時區,但 MySQL 上看到的時間就是差13個小時,確認過 MySQL 主機時區是台灣的時區+8也沒有錯。
-- 在 MySQL 執行以下 SQL 指令,顯示 MySQL 時區以及 MySQL 主機時區
show variables like "%time_zone%";

-- 發現 system_time_zone 是 CST,代表 MySQL 主機時區是 CST
-- 發現 time_zone 是 SYSTEM,代表 MySQL 時區參考 MySQL 主機時區

發生原因在於 CST 可能是中國標準時間(China Standard Time)或是美國中部時間(Central Standard Time),造成 Java 認為 MySQL 時區是美國中部時間。

明確指定 MySQL 時區

MySQL 時區不要參考 MySQL 主機時區,明確指定 MySQL 時區為+8,讓 Java 明確知道要用+8的時區。

# 修改 my.cnf,在 [mysqld] 下增加:
default-time-zone = '+08:00'

# 需要重新啟動 MySQL
-- 重起後,重新在 MySQL 執行以下 SQL 指令,顯示 MySQL 時區以及 MySQL 主機時區
show variables like "%time_zone%";

-- system_time_zone 是 CST
-- time_zone 是 +08:00

0 則回應: