什麼是我的伺服器本地時區設定

每個伺服器都有一個預設的全域性 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 資料型別始終以本地時間儲存在表中,TIMESTAMPs 以 UTC 格式儲存。因此,當 time_zone 設定為 UTC 時執行的 INSERT 語句儲存兩個相同的日期/時間值。

然後,當 time_zone 設定為伺服器本地時間時,將完成 SELECT 語句。TIMESTAMPs 總是從它們儲存的 UTC 表單轉換為 SELECT 語句中的本地時間。DATETIMEs 不是。因此, TIMESTAMPDIFF(MINUTE...) 操作計算本地時間和世界時間之間的差異。