สามารถเปลี่ยน Timezone ใน MySQL ได้ทั้งระดับ Session และ Global โดยใช้คำสั่ง SET time_zone
1. เปลี่ยน Timezone ระดับ Session (เฉพาะ Connection นี้)
SET time_zone = '+08:00';
-- หรือ
SET time_zone = 'Asia/Bangkok';
ตัวอย่าง
mysql> SET time_zone = '+08:00';
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT NOW();
+---------------------+
| NOW() |
+---------------------+
| 2018-10-18 13:14:30 |
+---------------------+
2. เปลี่ยน Timezone ระดับ Global (ทั้ง Server)
SET GLOBAL time_zone = '+08:00';
-- หรือ
SET GLOBAL time_zone = 'Asia/Bangkok';
⚠️ ต้องมีสิทธิ์ SUPER หรือ SYSTEM_VARIABLES_ADMIN
3. ตั้งค่าคงที่ใน my.cnf / my.ini (Permanent)
[mysqld]
default-time-zone = '+08:00'
# หรือ
default-time-zone = 'Asia/Bangkok'
ต้อง Restart MySQL Service
4. ดู Timezone ปัจจุบัน
SELECT @@time_zone; -- Session
SELECT @@global.time_zone; -- Global
SELECT @@system_time_zone; -- System OS
รูปแบบ Timezone ที่รองรับ
- Offset:
'+08:00','-05:00','+00:00'(UTC) - Named Zone:
'Asia/Bangkok','America/New_York','UTC'(ต้องโหลด Timezone Tables) - SYSTEM: ใช้ Timezone ของ OS
โหลด Timezone Tables (สำหรับ Named Zone)
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
Best Practice
- เก็บข้อมูลเป็น UTC ใน Database (ใช้ TIMESTAMP หรือ DATETIME UTC)
- แปลง Timezone เฉพาะตอนแสดงผล (Application Layer)
- ใช้ Named Zone (Asia/Bangkok) แทน Offset เพื่อรองรับ DST อัตโนมัติ