| 定義 | 建立時 | 更新時 |
|---|---|---|
TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 當前時間 | 自動刷新為當前時間 |
TIMESTAMP DEFAULT CURRENT_TIMESTAMP | 當前時間 | 不變 |
TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 0(零值) | 自動刷新 |
TIMESTAMP DEFAULT 'YYYY-MM-DD HH:MM:SS' ON UPDATE CURRENT_TIMESTAMP | 指定固定值 | 自動刷新 |
MySQL 不支援 DEFAULT NOW() 等函數預設值,需用 TIMESTAMP 實現自動時間戳。
YYYYMMDDHHMMSSTIMESTAMP(8))插入資料時仍存完整時分秒,查詢只顯示日期ALTER TABLE ... MODIFY col TIMESTAMP(14) 擴大寬度 → 隱藏的時分秒重現UNIX_TIMESTAMP()HOUR()、SECOND() 等需格式化後的值包含對應部分(寬度 ≥ 10 才有時)DATE_FORMAT(ts, '%Y-%m-%d %H:%i:%s')NULL其他 TIMESTAMP 欄位需明確設 NULL 或 NOW() 才自動更新。
DATE → TIMESTAMP:時間補 00:00:00TIMESTAMP → DATE:時間截斷'10:11:12' 被解析為 2010-11-12(年月日),非時間CREATE TABLE test (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
ts1 TIMESTAMP(8),
ts2 TIMESTAMP(14)
);
INSERT INTO test (ts1, ts2) VALUES (NULL, NULL);
SELECT * FROM test;
ALTER TABLE test MODIFY ts1 TIMESTAMP(14);
SELECT * FROM test; -- ts1 顯示完整時分秒
TIMESTAMP 適合自動記錄建立/修改時間,但範圍受限、函數操作有門檻、顯示寬度易誤導。新專案建議:建立時間用 DATETIME DEFAULT CURRENT_TIMESTAMP(MySQL 8.0+),修改時間用 DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,避開所有坑。