[MySQL]修改MySQL 時區

MySQL 中,時區 (time_zone) 影響到 時間函式(如 NOW())的輸出,但 不影響 TIMESTAMP 類型的儲存,因為 TIMESTAMP 會自動轉換為 UTC 存儲


✅ 1. 檢查 MySQL 當前時區

執行以下 SQL 查詢:

SELECT @@global.time_zone, @@session.time_zone;

回傳可能是:

+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone | +--------------------+---------------------+ | SYSTEM | +00:00 | +--------------------+---------------------+

這表示:

  • @@global.time_zoneSYSTEM(使用系統時區)
  • @@session.time_zoneUTC+0


SELECT @@global.time_zone, @@session.time_zone; 






✅ 2. 修改 MySQL 時區

方法 1:臨時修改(不影響重啟後設定)

🔹 修改當前連線(Session)時區

SET time_zone = '+08:00'; -- 設定為台北(UTC+8)

驗證變更:

SELECT NOW();

🔹 修改全域(Global)時區

SET GLOBAL time_zone = '+08:00';

這樣所有新的連線都會使用 UTC+8,但 MySQL 重啟後會恢復預設值






方法 2:永久修改(影響 MySQL 服務)

如果想要 永久修改 MySQL 時區,需要編輯 MySQL 配置檔案

🔹 1. 編輯 my.cnfmy.ini

Linux/macOS(通常在 /etc/mysql/my.cnf/etc/my.cnf):

sudo nano /etc/mysql/my.cnf

Windows(通常在 C:\ProgramData\MySQL\MySQL Server X.X\my.ini):

notepad "C:\ProgramData\MySQL\MySQL Server X.X\my.ini"

[mysqld] 區塊內添加:

[mysqld]
default-time-zone = '+08:00'

保存後,重啟 MySQL:

sudo systemctl restart mysql # Linux
net stop mysql && net start mysql # Windows

🔹 2. 確保 MySQL 支援時區

有時 time_zone 可能無法正確設定,需要載入時區數據:

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql

然後在 my.cnf 設定:

default-time-zone = 'Asia/Taipei'

✅ 3. 設定 MySQL 時區為 Asia/Taipei(台北時間)

SET GLOBAL time_zone = 'Asia/Taipei';
SET time_zone = 'Asia/Taipei';

但部分 MySQL 版本 不支援直接使用 Asia/Taipei,可以改用:

SET GLOBAL time_zone = '+08:00';
SET time_zone = '+08:00';

 總結

操作指令影響範圍
查詢當前時區SELECT @@global.time_zone, @@session.time_zone;查看目前的 MySQL 時區
修改當前連線時區SET time_zone = '+08:00';只影響當前連線
修改全域時區SET GLOBAL time_zone = '+08:00';影響新連線(重啟 MySQL 會還原)
永久修改時區my.cnf 加入 default-time-zone = '+08:00'影響整個 MySQL 服務

留言

這個網誌中的熱門文章

SQL設定SQL Server最大連線數及查詢語句

[MS-SQL] 利用資料庫的 Database mail 功能發送郵件 - 3.Send mail test

[MS-SQL]一些抓取資料庫結構及述敍用的 SQL