MySQL 提供了多種時間相關數據類型,正確選型對存儲效率、查詢性能及業務正確性至關重要。本文總結核心類型特性與選型建議。
| 類型 | 存儲字節 | 格式 | 範圍 | 時區轉換 | 適用場景 |
|---|---|---|---|---|---|
| DATE | 3 字節 | YYYY-MM-DD | 1000-01-01 ~ 9999-12-31 | 無 | 僅需日期(生日、入職日期) |
| TIME | 3 字節 | HH:MM:SS | -838:59:59 ~ 838:59:59 | 無 | 僅需時間(鬧鐘、工時) |
| DATETIME | 8 字節 | YYYY-MM-DD HH:MM:SS | 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 | 無(存儲字面值) | 歷史數據、跨時區系統、需保留原始輸入時間 |
| TIMESTAMP | 4 字節 | YYYY-MM-DD HH:MM:SS | 1970-01-01 00:00:01 UTC ~ 2038-01-19 03:14:07 UTC | 有(存儲 UTC,讀取轉當前會話時區) | 記錄創建/更新時間、日志、跨時區應用 |
| YEAR | 1 字節 | YYYY | 1901 ~ 2155 | 無 | 僅需年份 |
MySQL 5.6.5+ 支持多列自動屬性:
CREATE TABLE t ( create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP );
DATETIME 同版本起亦支持類似語法。
DEFAULT CURRENT_TIMESTAMP + ON UPDATE CURRENT_TIMESTAMPTIMESTAMP 記錄系統操作時間(創建、更新、日志),利用自動屬性減少應用層代碼。DATE 或 DATETIME,避免時區轉換導致業務誤解。DATETIME(6) 獲得微秒精度。