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

วิธีตั้งค่า NOW() และ CURDATE() ให้ใช้ UTC ใน MySQL

วิธีการตั้งค่า Timezone เป็น UTC อย่างถาวร

วิธีที่แนะนำคือแก้ไขไฟล์กำหนดค่า my.cnf (Linux) หรือ my.ini (Windows)

ขั้นตอนการตั้งค่า

1. หาตำแหน่งไฟล์ข้อมูล

SELECT @@datadir;

2. แก้ไขไฟล์ my.cnf/my.ini

เพิ่มบรรทัดต่อไปนี้ในส่วน [mysqld]:

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

หรือ (รูปแบบเก่า):

[mysqld_safe]
timezone = UTC

3. Restart MySQL Service

# Linux
sudo systemctl restart mysqld

# Windows (Services.msc หรือ Command Prompt แบบ Admin)
net stop mysql80
net start mysql80

วิธีทางเลือก: ตั้งค่าต่อ Session (ไม่ถาวร)

SET time_zone = '+00:00';
-- หรือ
SET time_zone = 'UTC';

⚠️ ไม่แนะนำ ให้รันคำสั่งนี้ทุกครั้งที่เชื่อมต่อ (Performance overhead)

การตรวจสอบ Timezone ปัจจุบัน

SELECT @@global.time_zone, @@session.time_zone;
SELECT NOW(), UTC_TIMESTAMP();

คำแนะนำเพิ่มเติม

  • 🕐 Best Practice: เก็บข้อมูลเป็น UTC ใน Database, แปลง timezone ที่ Application Layer
  • 🔧 ใช้ CONVERT_TZ() สำหรับแปลง timezone ใน Query
  • 📅 CURDATE() และ NOW() จะคืนค่าตาม Session Timezone
  • ⚡ UTC_TIMESTAMP(), UTC_DATE(), UTC_TIME() คืนค่า UTC เสมอ ไม่ขึ้นกับ Timezone setting