什麼是我的伺服器本地時區設定
每個伺服器都有一個預設的全域性 time_zone 設定,由伺服器計算機的所有者配置。你可以通過以下方式設定當前時區:
SELECT @@time_zone
不幸的是,這通常會產生值 SYSTEM
,這意味著 MySQL 時間由伺服器作業系統的時區設定決定。
這一系列的查詢(是的,它是一個黑客攻擊 )可以為你提供伺服器時區設定和 UTC 之間的分鐘偏移量。
CREATE TEMPORARY TABLE times (dt DATETIME, ts TIMESTAMP);
SET time_zone = 'UTC';
INSERT INTO times VALUES(NOW(), NOW());
SET time_zone = 'SYSTEM';
SELECT dt, ts, TIMESTAMPDIFF(MINUTE, dt, ts)offset FROM times;
DROP TEMPORARY TABLE times;
這是如何運作的?臨時表中具有不同資料型別的兩列是線索。DATETIME
資料型別始終以本地時間儲存在表中,TIMESTAMP
s 以 UTC 格式儲存。因此,當 time_zone 設定為 UTC 時執行的 INSERT
語句儲存兩個相同的日期/時間值。
然後,當 time_zone 設定為伺服器本地時間時,將完成 SELECT 語句。TIMESTAMP
s 總是從它們儲存的 UTC 表單轉換為 SELECT 語句中的本地時間。DATETIME
s 不是。因此, TIMESTAMPDIFF(MINUTE...)
操作計算本地時間和世界時間之間的差異。