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

DATETIME หรือ TIMESTAMP ใน MySQL: ควรเลือกอันไหน

ทั้ง DATETIME และ TIMESTAMP ใช้เก็บวันที่และเวลา แต่มีความแตกต่างสำคัญที่ส่งผลต่อการเลือกใช้

ตารางเปรียบเทียบ

คุณสมบัติDATETIMETIMESTAMP
ช่วงค่า (Range)1000-01-01 ถึง 9999-12-311970-01-01 ถึง 2038-01-19 (Year 2038 problem)
พื้นที่จัดเก็บ8 ไบต์4 ไบต์
Timezoneไม่เก็บ Timezone (เก็บค่าที่ป้อนเข้าไป)แปลงเป็น UTC ตอนเก็บ, แปลงกลับตอนอ่าน ตาม Timezone ของ Session
Default Valueไม่มี (ต้องระบุ)สามารถตั้ง DEFAULT CURRENT_TIMESTAMP ได้
Auto Updateไม่รองรับรองรับ ON UPDATE CURRENT_TIMESTAMP
Index Performanceช้ากว่าเล็กน้อยเร็วกว่า (ขนาดเล็กกว่า)

ตัวอย่างการใช้งาน TIMESTAMP

CREATE TABLE TimeStampDemo (
    MyDataTime TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

INSERT INTO TimeStampDemo VALUES (NOW());

SELECT * FROM TimeStampDemo;
-- ผลลัพธ์: 2018-10-11 17:30:38 (ขึ้นอยู่กับ Timezone ของ Server/Session)

แนวทางเลือกใช้

  • ใช้ TIMESTAMP เมื่อ:
    • ต้องการติดตามเวลาสร้าง/แก้ไขอัตโนมัติ (created_at, updated_at)
    • แอปพลิเคชันทำงานหลาย Timezone (เก็บเป็น UTC แปลงให้อัตโนมัติ)
    • ข้อมูลอยู่ในช่วง 1970-2038
  • ใช้ DATETIME เมื่อ:
    • ข้อมูลนอกช่วง TIMESTAMP (ก่อน 1970 หรือหลัง 2038)
    • ต้องการเก็บเวลาที่แน่นอน ไม่ให้แปลง Timezone (เช่น วันเกิด, วันครบรอบ)
    • ต้องการช่วงวันที่กว้าง (ถึงปี 9999)

หมายเหตุ MySQL 8.0+

รองรับ DATETIME(6) และ TIMESTAMP(6) สำหรับ Microsecond Precision (ความแม่นยำไมโครวินาที)