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

Kiểu dữ liệu cho UNIX_TIMESTAMP trong MySQL

Kiểu dữ liệu phù hợp cho UNIX TIMESTAMP

Hàm UNIX_TIMESTAMP() trả về số giây từ epoch (1970-01-01 00:00:00 UTC) → kiểu số nguyên (INTEGER).

Kiểu dữ liệu khuyến nghị

INT UNSIGNED  -- 0 đến 4,294,967,295 (đủ đến năm 2106)
-- hoặc
BIGINT        -- an toàn tuyệt đối cho tương lai xa

Lý do dùng integer:

  • Hiệu năng so sánh, index tốt nhất.
  • Phép toán toán học (+, -, >, <) tự nhiên.
  • Lưu trữ gọn (4 hoặc 8 byte).

Ví dụ chuyển đổi DATETIME → UNIX TIMESTAMP

Bảng UnixTime:

CREATE TABLE UnixTime (DueTime DATETIME);
INSERT INTO UnixTime VALUES (NOW()), ('2010-10-14'), ('2020-09-24');

Chuyển đổi:

SELECT UNIX_TIMESTAMP(DueTime) AS Output FROM UnixTime;

Kết quả

+------------+
| Output     |
+------------+
| 1545194231 |
| 1286994600 |
| 1600885800 |
+------------+

Chuyển ngược: UNIX TIMESTAMP → DATETIME

SELECT FROM_UNIXTIME(1545194231); -- 2018-12-19 10:07:11

Lưu ý múi giờ (Timezone)

  • UNIX_TIMESTAMP() chuyển theo time_zone của session.
  • Lưu UTC (time_zone = '+00:00') để nhất quán cross-server.
  • MySQL 8.0: TIMESTAMP tự chuyển đổi múi giờ, DATETIME không.

Khi nào dùng TIMESTAMP vs DATETIME vs INT

KiểuPhạm viMúi giờDung lượngDùng cho
TIMESTAMP1970-2038Tự chuyển đổi4 bytesCreated/Updated at (auto)
DATETIME1000-9999Không chuyển8 bytesNgày sinh, lịch hẹn, lịch sử
INT UNSIGNED1970-2106Ứng dụng quản lý4 bytesHigh-perf, partition, external sync
BIGINTVô hạn thực tếỨng dụng quản lý8 bytesNano-second, future-proof