Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

วิธีเปลี่ยน Timezone ใน MySQL

สามารถเปลี่ยน 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 อัตโนมัติ