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

ความแตกต่างระหว่าง MySQL DATETIME และ TIMESTAMP

ทั้งสองชนิดข้อมูลเก็บข้อมูลในรูปแบบ "YYYY-MM-DD HH:MM:SS" และรวมวันที่กับเวลา แต่มีความแตกต่างดังนี้:

  • Range (ช่วง) - DATETIME: 1000-01-01 00:00:00 ถึง 9999-12-31 23:59:59. TIMESTAMP: '1970-01-01 00:00:01' ถึง '2038-01-19 08:44:07'
  • Size (ขนาด) - DATETIME: 5 ไบต์ + 3 ไบต์สำหรับ fractional seconds. TIMESTAMP: 4 ไบต์ + 3 ไบต์สำหรับ fractional seconds. ก่อน MySQL 5.6.4 DATETIME ใช้ 8 ไบต์
  • Timezone Conversion - MySQL 5+ TIMESTAMP แปลงจากเวลาปัจจุบันเป็น UTC และกลับกัน DATETIME ไม่แปลง
  • Indexing - TIMESTAMP สามารถสร้างดัชนีได้ DATETIME ไม่สามารถ
  • Query Caching - คิวรี่ที่มี TIMESTAMP สามารถแคชได้ DATETIME ไม่สามารถ

ตัวอย่าง

mysql> CREATE TABLE test_datetime(time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);
mysql> INSERT INTO test_datetime (time) VALUES (CURRENT_TIMESTAMP);
mysql> SELECT * FROM test_datetime;
+---------------------+
| time                |
+---------------------+
| 2017-11-14 17:29:03 |
+---------------------+

mysql> CREATE TABLE test_timestamp(time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);
mysql> INSERT INTO test_timestamp (time) VALUES (CURRENT_TIMESTAMP);
mysql> SELECT * FROM test_timestamp;
+---------------------+
| time                |
+---------------------+
| 2017-11-14 17:29:50 |
+---------------------+

เปลี่ยน timezone เป็น UTC-05:00 ผลลัพธ์ของ TIMESTAMP เปลี่ยนแต่ DATETIME ไม่เปลี่ยน:

mysql> SET @@session.time_zone = '-5:00';
mysql> SELECT * FROM test_timestamp;
+---------------------+
| time                |
+---------------------+
| 2017-11-14 06:59:50 |
+---------------------+

mysql> SELECT * FROM test_datetime;
+---------------------+
| time                |
+---------------------+
| 2017-11-14 17:29:03 |
+---------------------+