Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Sự khác biệt giữa DATETIME và TIMESTAMP trong MySQL

Cả hai đều lưu theo định dạng YYYY-MM-DD HH:MM:SS nhưng có khác biệt quan trọng:

  • Phạm vi (Range): DATETIME: 1000-01-01 00:00:00 – 9999-12-31 23:59:59. TIMESTAMP: 1970-01-01 00:00:01 UTC – 2038-01-19 08:44:07 UTC.
  • Kích thước lưu trữ: DATETIME: 5 byte + 3 byte cho microseconds. TIMESTAMP: 4 byte + 3 byte microseconds (trước MySQL 5.6.4 DATETIME dùng 8 byte).
  • Chuyển đổi múi giờ: TIMESTAMP tự chuyển từ múi giờ session sang UTC khi lưu, và ngược lại khi đọc. DATETIME không chuyển đổi.
  • Indexing: TIMESTAMP có thể index, DATETIME không (trước MySQL 5.6.4).
  • Query Cache: Truy vấn có TIMESTAMP có thể cache, DATETIME không.

Ví dụ minh họa chuyển múi giờ

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> 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> SET @@session.time_zone = '-5:00';  -- Chuyển sang UTC-5
mysql> SELECT * FROM test_timestamp;  -- Giá trị thay đổi theo múi giờ
mysql> SELECT * FROM test_datetime;   -- Giá trị KHÔNG thay đổi

Kết quả: TIMESTAMP thay đổi theo múi giờ, DATETIME giữ nguyên.