傳統做法使用 DATETIME 或 TIMESTAMP 儲存日期時間,但對於資料量龐大的表,改用 INT 儲存 Unix 時間戳(秒數)可顯著節省儲存空間並提升查詢效能。

將原 DATETIME 欄位改為 INT UNSIGNED 儲存 Unix Timestamp。
SELECT uptime, FROM_UNIXTIME(uptime) FROM qlm_urlbridges;

SELECT uptime, FROM_UNIXTIME(uptime)
FROM qlm_urlbridges
WHERE uptime > UNIX_TIMESTAMP('2015-06-01 00:00:00');
將 Java Date 轉為秒級 Unix Timestamp 存入資料庫:
Integer timestamp = Integer.valueOf(
Long.valueOf(new Date().getTime() / 1000).toString()
);
說明: getTime() 回傳毫秒數,除以 1000 轉為秒,再轉為 Integer 對應資料庫 INT 欄位。
| 方案 | 儲存大小 | 可讀性 | 時區處理 | 適用場景 |
|---|---|---|---|---|
| DATETIME | 8 bytes | 高 | 無時區資訊 | 需保留原始輸入時區 |
| TIMESTAMP | 4 bytes | 高 | 自動轉換至 UTC | 需自動時區轉換 |
| INT (Unix Timestamp) | 4 bytes | 低(需轉換) | 應用層處理 | 大量資料、高效能查詢、跨時區應用 |
建議: 核心業務時間建議仍用 DATETIME/TIMESTAMP 保持可讀性;僅在日誌、追蹤、統計等大量寫入、較少直接人工查看的表中採用 INT 儲存。查詢時搭配 FROM_UNIXTIME()、UNIX_TIMESTAMP() 函式即可無縫轉換。