目次
1. DATETIME
ใน MySQL คืออะไร
DATETIME
ใน MySQL เป็นประเภทข้อมูลที่ใช้จัดการทั้งวันที่และเวลาพร้อมกัน การจัดการข้อมูลวันที่และเวลาในฐานข้อมูลเป็นสิ่งสำคัญสำหรับแอปพลิเคชันต่างๆ เช่น การบันทึกข้อมูล (logging) หรือระบบจอง ฯลฯ ประเภทข้อมูล DATETIME
จะจัดเก็บวันที่และเวลาไว้ในฟิลด์เดียว และสามารถเก็บค่าได้หลากหลาย โดยมีช่วงตั้งแต่ '1000-01-01 00:00:00'
ถึง '9999-12-31 23:59:59'
และยังรองรับเศษวินาที (fractional seconds) ด้วย2. ภาพรวมประเภทข้อมูลวันที่และเวลาใน MySQL
2.1 ประเภทข้อมูลที่จัดการวันที่และเวลา
MySQL มีประเภทข้อมูลต่อไปนี้สำหรับจัดการวันที่และเวลา:DATE
: ประเภทข้อมูลสำหรับจัดการเฉพาะปี เดือน วัน ช่วงคือ'1000-01-01'
ถึง'9999-12-31'
TIME
: ประเภทข้อมูลสำหรับจัดการเฉพาะเวลา ช่วงคือ'-838:59:59'
ถึง'838:59:59'
DATETIME
: ประเภทข้อมูลที่รวมวันที่และเวลาเข้าด้วยกัน ช่วงคือ'1000-01-01 00:00:00'
ถึง'9999-12-31 23:59:59'
TIMESTAMP
: ประเภทข้อมูลที่จัดเก็บค่า UNIX Timestamp ช่วงคือ'1970-01-01 00:00:01'
ถึง'2038-01-19 03:14:07'
2.2 ความแตกต่างระหว่าง DATETIME
และ TIMESTAMP
DATETIME
และ TIMESTAMP
มีความคล้ายคลึงกัน แต่มีความแตกต่างดังต่อไปนี้:- เขตเวลา (Timezone):
DATETIME
จัดเก็บค่าคงที่ที่ไม่ขึ้นกับเขตเวลา ในขณะที่TIMESTAMP
จะถูกแปลงเป็น UTC เมื่อจัดเก็บ และถูกแปลงกลับเป็นเขตเวลาปัจจุบันของเซิร์ฟเวอร์เมื่อดึงข้อมูล ดังนั้นDATETIME
จึงเหมาะสำหรับวันที่และเวลาที่ไม่ได้รับผลกระทบจากเขตเวลา (เช่น วันที่จัดงาน) ส่วนTIMESTAMP
เหมาะสำหรับข้อมูลที่เกี่ยวข้องกับเขตเวลาของเซิร์ฟเวอร์ เช่น การบันทึกข้อมูล (logging) - รูปแบบการจัดเก็บ:
DATETIME
จะถูกจัดเก็บในรูปแบบเดิม แต่TIMESTAMP
จะถูกจัดเก็บในรูปแบบ UNIX Timestamp ดังนั้นTIMESTAMP
จะได้รับผลกระทบจากการตั้งค่าเขตเวลาของเซิร์ฟเวอร์ในการแสดงค่าเวลาของข้อมูล
3. วิธีการใช้งาน DATETIME
ใน MySQL
3.1 การสร้างคอลัมน์ DATETIME
ในการสร้างคอลัมน์ประเภท DATETIME
ให้ใช้ไวยากรณ์ SQL ดังต่อไปนี้:CREATE TABLE sample_table (
event_time DATETIME
);
ในตัวอย่างนี้ เราได้สร้างคอลัมน์ DATETIME
ชื่อ event_time
ในตาราง sample_table
3.2 การแทรกค่า DATETIME
ค่า DATETIME
ใน MySQL สามารถแทรกได้หลายรูปแบบ รูปแบบพื้นฐานคือ 'YYYY-MM-DD HH:MM:SS'
ตัวอย่างเช่น:INSERT INTO sample_table (event_time) VALUES ('2024-09-16 14:30:00');
นอกจากนี้ ยังอนุญาตให้ใช้รูปแบบอื่นๆ ดังต่อไปนี้:'YY-MM-DD HH:MM:SS'
: รูปแบบที่ระบุปีด้วยตัวเลข 2 หลัก'YYYYMMDDHHMMSS'
: รูปแบบที่ระบุโดยไม่มีตัวคั่น
INSERT INTO sample_table (event_time) VALUES ('24-09-16 14:30:00');
INSERT INTO sample_table (event_time) VALUES (20240916143000);
ข้อมูลที่แทรกในรูปแบบเหล่านี้จะถูกจัดเก็บอย่างถูกต้อง หากระบุปีด้วยตัวเลข 2 หลัก '70-99'
จะถูกแปลงเป็น 1970-1999
และ '00-69'
จะถูกแปลงเป็น 2000-2069
3.3 การดึงค่า DATETIME
เมื่อดึงค่า DATETIME
, MySQL จะแสดงผลในรูปแบบ 'YYYY-MM-DD HH:MM:SS'
โดยค่าเริ่มต้น ตัวอย่างเช่น:SELECT event_time FROM sample_table;
คิวรีนี้จะแสดงค่าในคอลัมน์ DATETIME
ของตารางในรูปแบบมาตรฐาน4. การจัดการเศษวินาที (Fractional Seconds)
4.1 ความแม่นยำของ DATETIME
ใน MySQL คุณสามารถรวมเศษวินาทีในค่า DATETIME
ได้ คุณสามารถระบุความแม่นยำด้วยตัวเลือก fsp
ซึ่งสามารถจัดเก็บเศษวินาทีได้ตั้งแต่ 0 ถึง 6 ตัวอย่างเช่น หากต้องการสร้างคอลัมน์ที่มีเศษวินาที 3 หลัก:CREATE TABLE precise_times (
event_time DATETIME(3)
);
ในตัวอย่างนี้ คอลัมน์ event_time
สามารถจัดเก็บเศษวินาทีได้สูงสุด 3 หลัก4.2 การแทรกค่าที่มีเศษวินาที
ในการแทรกค่าDATETIME
ที่มีเศษวินาที ให้ทำดังนี้:INSERT INTO precise_times (event_time) VALUES ('2024-09-16 14:30:00.123');
คิวรีนี้จะจัดเก็บค่าที่มีเศษวินาทีได้อย่างถูกต้อง ค่าเศษส่วนที่แทรกจะไม่ถูกปัดเศษและจะถูกเก็บรักษาไว้เมื่อดึงข้อมูล 
5. แนวทางปฏิบัติที่ดีที่สุดสำหรับ DATETIME
5.1 การเลือกใช้ DATETIME
และ TIMESTAMP
- กรณีที่ควรใช้
DATETIME
: วันที่และเวลาคงที่ที่ไม่ขึ้นกับเขตเวลา (เช่น เวลาเริ่มต้นของกิจกรรม, วันที่จอง) - กรณีที่ควรใช้
TIMESTAMP
: ข้อมูลวันที่และเวลาที่เกี่ยวข้องกับเขตเวลาของเซิร์ฟเวอร์ (เช่น เวลาที่สร้างหรืออัปเดตข้อมูล)
5.2 การจัดการเขตเวลา
DATETIME
ไม่มีแนวคิดเรื่องเขตเวลา ดังนั้นจึงจำเป็นต้องมีการจัดการเขตเวลาในฝั่งแอปพลิเคชัน ในทางกลับกัน TIMESTAMP
จะพิจารณาเขตเวลาของเซิร์ฟเวอร์โดยอัตโนมัติเมื่อจัดเก็บและดึงค่า จึงเหมาะสำหรับการทำงานในเขตเวลาที่แตกต่างกันทั่วโลก6. ข้อผิดพลาดที่พบบ่อยและวิธีหลีกเลี่ยง
6.1 วันที่ศูนย์ (Zero Date) และค่าที่ไม่ถูกต้อง
ใน MySQL หากคุณพยายามแทรกค่าDATETIME
ที่ไม่ถูกต้อง จะมีการจัดเก็บวันที่ศูนย์เป็น '0000-00-00 00:00:00'
ซึ่งโดยทั่วไปแล้วไม่ใช่ค่าวันที่ที่ถูกต้อง ดังนั้นจึงจำเป็นต้องมีการตรวจสอบข้อมูลเมื่อป้อนข้อมูลเพื่อป้องกันการแทรกค่าที่ไม่ถูกต้อง การใช้งาน validation เพื่อยืนยันว่าข้อมูลที่ป้อนอยู่ในช่วงและรูปแบบที่เหมาะสมจะช่วยป้องกันการจัดเก็บวันที่ศูนย์ได้6.2 การใช้ความแม่นยำผิด
เมื่อระบุความแม่นยำของเศษวินาที การใช้ความแม่นยำที่ไม่ถูกต้องอาจทำให้ไม่ได้ผลลัพธ์ตามที่ตั้งใจไว้ ระบุความแม่นยำของเศษวินาทีเฉพาะเมื่อจำเป็นเท่านั้น และกำหนดค่าfsp
อย่างรอบคอบ ตัวอย่างเช่น หากแอปพลิเคชันของคุณไม่ต้องการความแม่นยำที่น้อยกว่าวินาที ก็ไม่จำเป็นต้องตั้งค่าเศษวินาทีในคอลัมน์ DATETIME
7. สรุป
ในบทความนี้ เราได้อธิบายรายละเอียดเกี่ยวกับประเภทข้อมูลDATETIME
ใน MySQL DATETIME
เป็นประเภทข้อมูลที่มีประโยชน์มากสำหรับการจัดการทั้งวันที่และเวลาพร้อมกัน และเหมาะสำหรับการจัดเก็บค่าที่ไม่ได้รับผลกระทบจากเขตเวลา การทำความเข้าใจความแตกต่างระหว่าง DATETIME
และ TIMESTAMP
, การจัดการเขตเวลา และการใช้เศษวินาที จะช่วยให้คุณจัดการข้อมูลวันที่และเวลาในฐานข้อมูลได้อย่างมีประสิทธิภาพ นอกจากนี้ การมีความรู้เกี่ยวกับข้อผิดพลาดทั่วไปและวิธีหลีกเลี่ยงจะช่วยรักษาความสอดคล้องและความน่าเชื่อถือของข้อมูลได้8. คำถามที่พบบ่อย (FAQ)
Q1: ความแตกต่างหลักระหว่าง DATETIME
และ TIMESTAMP
คืออะไร?
DATETIME
จัดเก็บวันที่และเวลาคงที่ที่ไม่ขึ้นกับเขตเวลา เช่น เหมาะสำหรับการจัดเก็บวันที่จองหรือเวลาจัดงานที่ไม่เปลี่ยนแปลงในเขตเวลาใดๆ ในทางกลับกัน TIMESTAMP
จะถูกจัดเก็บโดยอ้างอิง UTC และจะถูกแปลงเป็นเขตเวลาของเซิร์ฟเวอร์เมื่อดึงข้อมูล เหมาะสำหรับข้อมูลวันที่และเวลาที่ขึ้นอยู่กับเขตเวลาของเซิร์ฟเวอร์ เช่น การบันทึกข้อมูล (logging)Q2: จะบันทึกเศษวินาทีใน DATETIME
ได้อย่างไร?
เมื่อสร้างคอลัมน์ DATETIME
คุณสามารถกำหนดความแม่นยำของเศษวินาทีได้โดยการระบุค่า fsp
ตัวอย่างเช่น การระบุ DATETIME(3)
จะช่วยให้คุณสามารถจัดเก็บเศษวินาทีได้สูงสุด 3 หลัก เมื่อแทรกค่า ให้ใช้ค่าที่มีเศษวินาทีและจะถูกจัดเก็บในรูปแบบที่เหมาะสมQ3: ควรใช้ DATETIME
หรือ TIMESTAMP
ดี?
ขึ้นอยู่กับวัตถุประสงค์ หากคุณต้องการจัดเก็บวันที่และเวลาที่คงที่ ให้ใช้ DATETIME
ในทางกลับกัน หากเป็นข้อมูลวันที่และเวลาที่ได้รับผลกระทบจากเขตเวลาของเซิร์ฟเวอร์ เช่น เวลาที่สร้างหรืออัปเดตข้อมูล ให้ใช้ TIMESTAMP
เนื่องจาก TIMESTAMP
มีการแปลงเขตเวลาอัตโนมัติ จึงเหมาะสำหรับการทำงานที่ต้องการการดำเนินงานในเขตเวลาที่แตกต่างกัน