在 MySQL 中設定時區

Subhan Hagverdiyev 2023年12月11日
  1. 在 MySQL 中顯示伺服器中的當前時間
  2. 更改配置檔案以更改 MySQL 中的時區
  3. 更改 Global time_zone 變數以更改 MySQL 中的時區
  4. 僅為 MySQL 中的會話更改時區
在 MySQL 中設定時區

有很多關於 MySQL 和時區管理的文章,但在本文中,我們將嘗試填補缺失的資訊。我們將介紹如何有效地處理時區。

在 MySQL 中顯示伺服器中的當前時間

有時,在使用 MySQL 伺服器時,你需要處理不同的時區,這有時會讓你感到困惑。例如,你需要根據客戶的時間設定 MySQL Server 時間或將資料遷移到不同的伺服器和時區。

當你切換到夏令時 (DST) 時區時,也可能發生這種情況。為了確保時區與計劃的一致,你必須檢查或更改 MySQL 伺服器時區。

首先,我們需要檢查 MySQL 伺服器中的當前時間,以檢查它是否是所需的時區。

SELECT NOW();
+---------------------+
| NOW()               |
+---------------------+
| 2022-02-19 21:58:15 |
+---------------------+
1 row in set (0.00 sec)

我們還可以查詢當前的全域性和會話時區值。

SELECT @@GLOBAL.time_zone, @@SESSION.time_zone;

預設響應是 system,這意味著伺服器和系統時區是相同的。

+--------------------+--------------------+
| @@GLOBAL.time_zone |@@SESSION.time_zone |
+--------------------+--------------------+
| SYSTEM             | SYSTEM             |
+--------------------+--------------------+
1 row in set (0.00 sec)

有幾種方法可以更改時區;讓我們一一看看。

更改配置檔案以更改 MySQL 中的時區

最簡單的方法是編輯配置檔案並設定預設時區。你可以通過以下程式碼從 Linux 伺服器的終端開啟 my.cnf 配置檔案。

$ sudo vi /etc/mysql/my.cnf

開啟檔案後,我們需要向下滾動一點找到 [mysqld] 部分,在這裡我們將看到 default-time-zone = "+00:00"。此處 "+00:00" 顯示與 GMT 區域的偏移量。

我們可以通過設定"+01:00"將其更改為匈牙利的時區。在某些情況下,你可能沒有 [mysqld] 部分;在這種情況下,你需要將其新增到檔案的末尾。

編輯檔案後,我們需要關閉它並使用以下命令重新啟動伺服器。

$ sudo service mysql restart

更改 Global time_zone 變數以更改 MySQL 中的時區

我們還可以更改伺服器的全球時區並設定新的 GMT 偏移值。

SET GLOBAL time_zone = '-4:00';

在此命令中,你需要設定你所在時區的 GMT 偏移量。我們將其設定為 GMT -4:00 小時。

你還可以使用其他定義,例如更改變數或編寫特定時區名稱。

SET GLOBAL time_zone = 'Europe/Budapest';
SET @@global.time_zone = '+02:00';

如果我們使用特定時區的名稱而不是數值,我們可能會遇到一個小問題。如果我們收到未知或不正確的時區錯誤,則時區資料不會載入到 MySQL 伺服器中。

你可以按照填充時區表解決此問題。

僅為 MySQL 中的會話更改時區

如你所見,我們最初查詢了兩個變數;其中之一是 system_time_zone

通過更改此變數,你不會更改全域性時區,而只會更改每個會話的時區;重新啟動伺服器並再次執行後,你將回到原來的時區。

SET time_zone = "+00:00";
Subhan Hagverdiyev avatar Subhan Hagverdiyev avatar

Subhan is a professional back-end developer as well as mobile developer. He is also open-source contributor by writing articles.

LinkedIn