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 theotime_zonecủa session.- Lưu UTC (time_zone = '+00:00') để nhất quán cross-server.
- MySQL 8.0:
TIMESTAMPtự chuyển đổi múi giờ,DATETIMEkhông.
Khi nào dùng TIMESTAMP vs DATETIME vs INT
| Kiểu | Phạm vi | Múi giờ | Dung lượng | Dùng cho |
|---|---|---|---|---|
| TIMESTAMP | 1970-2038 | Tự chuyển đổi | 4 bytes | Created/Updated at (auto) |
| DATETIME | 1000-9999 | Không chuyển | 8 bytes | Ngày sinh, lịch hẹn, lịch sử |
| INT UNSIGNED | 1970-2106 | Ứng dụng quản lý | 4 bytes | High-perf, partition, external sync |
| BIGINT | Vô hạn thực tế | Ứng dụng quản lý | 8 bytes | Nano-second, future-proof |