ทั้งประเภทข้อมูลจัดเก็บข้อมูลในรูปแบบ “YYYY-MM-DD HH:MM:SS” และรวมวันที่และเวลา แม้ว่าจะมีความคล้ายคลึงกัน แต่ก็มีความแตกต่างดังต่อไปนี้ -
- ช่วง − ประเภทข้อมูล Datetime รองรับวันที่พร้อมกับเวลาในช่วงระหว่าง 1000-01-01 00:00:00 และ 9999-12-31 23:59:59 แต่ประเภทข้อมูลการประทับเวลารองรับวันที่พร้อมกับเวลาในช่วงระหว่าง '1970-01-01 00:00:01' ถึง '2038-01-19 08:44:07'
- ขนาด − Datetime ต้องการ 5 ไบต์พร้อมกับ 3 ไบต์เพิ่มเติมสำหรับการจัดเก็บข้อมูลเศษเสี้ยววินาที ในทางกลับกัน ประเภทข้อมูลการประทับเวลาต้องใช้ 4 ไบต์พร้อมกับ 3 ไบต์เพิ่มเติมสำหรับการจัดเก็บข้อมูลเศษเสี้ยววินาที แต่ก่อน MySQL 5.6.4 DateTime ต้องการ 8 ไบต์และ 3 ไบต์เพิ่มเติมสำหรับการจัดเก็บข้อมูลเศษเสี้ยววินาที
- แปลงจากเขตเวลาหนึ่งเป็นเขตเวลาอื่น − ที่จริงแล้วใน MySQL5+ ค่าการประทับเวลาจะแปลงจากเวลาปัจจุบันเป็น UTC และในทางกลับกัน ในขณะที่ datetime ไม่ได้ทำการแปลงใดๆ
- การจัดทำดัชนี − การทำดัชนีสามารถทำได้บนข้อมูลการประทับเวลา แต่ไม่สามารถจัดทำดัชนีข้อมูลวันที่และเวลาได้
- การแคชข้อความค้นหา - การสืบค้นที่มีประเภทข้อมูลประทับเวลาสามารถแคชได้ แต่การสืบค้นที่มีประเภทข้อมูลเวลาวันที่และเวลาไม่สามารถแคชได้
ข้างต้นคือความแตกต่างที่สำคัญระหว่างประเภทข้อมูล DATETIME และ TIMESTAMP และตัวอย่างต่อไปนี้จะแสดงให้เห็น -
ตัวอย่าง
mysql> Create table test_datetime(time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP); Query OK, 0 rows affected (0.44 sec) mysql> INSERT INTO test_datetime (time) values (CURRENT_TIMESTAMP); Query OK, 1 row affected (0.04 sec) mysql> Select * from test_datetime; +---------------------+ | time | +---------------------+ | 2017-11-14 17:29:03 | +---------------------+ 1 row in set (0.00 sec) mysql> Create table test_timestamp(time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP); Query OK, 0 rows affected (0.64 sec) mysql> INSERT INTO test_timestamp (time) values (CURRENT_TIMESTAMP); Query OK, 1 row affected (0.06 sec) mysql> Select * from test_timestamp; +---------------------+ | time | +---------------------+ | 2017-11-14 17:29:50 | +---------------------+ 1 row in set (0.00 sec)
ในแบบสอบถามต่อไปนี้ เราได้เปลี่ยนเขตเวลาเป็น UTC-05:00 และผลลัพธ์ถูกเปลี่ยนสำหรับตารางที่มีประเภทข้อมูล TIMESTAMP
mysql> SET @@session.time_zone = '-5:00'; Query OK, 0 rows affected (0.00 sec) mysql> Select * from test_timestamp; +---------------------+ | time | +---------------------+ | 2017-11-14 06:59:50 | +---------------------+ 1 row in set (0.00 sec)
ผลลัพธ์
mysql> Select * from test_datetime; +---------------------+ | time | +---------------------+ | 2017-11-14 17:29:03 | +---------------------+ 1 row in set (0.00 sec)