| 類型 | 範圍 | 格式 | 儲存空間 |
|---|---|---|---|
| DATETIME | 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 8 bytes |
| DATE | 1000-01-01 ~ 9999-12-31 | YYYY-MM-DD | 3 bytes |
| TIMESTAMP | 1970-01-01 00:00:01 UTC ~ 2038-01-19 03:14:07 UTC | YYYY-MM-DD HH:MM:SS | 4 bytes |
| TIME | -838:59:59 ~ 838:59:59 | HH:MM:SS | 3 bytes |
| YEAR | 1901 ~ 2155 | YYYY | 1 byte |
MySQL 允許存儲「不嚴格合法」日期(如 1999-11-31),僅檢查月 0-12、日 0-31。應用層需自行驗證。
| 函數 | 回傳值 | 字串語境格式 | 數值語境格式 |
|---|---|---|---|
| CURDATE() / CURRENT_DATE | 當前日期 | YYYY-MM-DD | YYYYMMDD |
| CURTIME() / CURRENT_TIME | 當前時間 | HH:MM:SS | HHMMSS |
| NOW() / SYSDATE() / CURRENT_TIMESTAMP | 當前日期時間 | YYYY-MM-DD HH:MM:SS | YYYYMMDDHHMMSS |
SELECT CURDATE(); -- 2024-05-20
SELECT CURDATE() + 0; -- 20240520
SELECT NOW(); -- 2024-05-20 14:30:00
DATE_ADD(date, INTERVAL expr unit)、DATE_SUB(...):加減間隔。DATEDIFF(date1, date2):天數差。TIMESTAMPDIFF(unit, dt1, dt2):指定單位差值。CURDATE() - birth 回傳整數(YYYYMMDD 差值),非天數;精確天數請用 DATEDIFF。表中第一個 TIMESTAMP 欄位具備自動初始化與更新特性:
NULL → 更新為當前時間。其餘 TIMESTAMP 欄位需明確設為 NULL 或 NOW() 才會更新。
CREATE TABLE student (
id INT PRIMARY KEY,
name CHAR(16),
score TINYINT,
mod_time TIMESTAMP
);
INSERT INTO student (id, name, score) VALUES (1, 'Tom', 80);
-- mod_time 自動填入建立時間
UPDATE student SET score=90 WHERE id=1;
-- mod_time 自動更新為修改時間
UPDATE student SET mod_time=NULL WHERE id=1;
-- 強制刷新 mod_time 為當前時間
UPDATE student SET score=85, mod_time=mod_time WHERE id=1;
-- 修改分數但保持 mod_time 不變
| 函數 | 用途 | 範例 |
|---|---|---|
| DATE_FORMAT(dt, fmt) | 日期時間格式化輸出 | DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i') |
| STR_TO_DATE(str, fmt) | 字串解析為日期 | STR_TO_DATE('2024/05/20', '%Y/%m/%d') |
| UNIX_TIMESTAMP([dt]) | 轉為 Unix 時間戳 | UNIX_TIMESTAMP() |
| FROM_UNIXTIME(ts) | 時間戳轉日期時間 | FROM_UNIXTIME(1716200000) |
| EXTRACT(unit FROM dt) | 擷取部分 | EXTRACT(MONTH FROM NOW()) |
system_time_zone、time_zone 系統變數。SET time_zone = '+08:00'; 或 SET time_zone = 'Asia/Taipei';(需載入時區表)。TIMESTAMP 以 UTC 儲存,讀取時轉換為連線時區;DATETIME 不轉換。善用 MySQL 豐富的日期時間函數與 TIMESTAMP 自動更新特性,能輕鬆實現建立/修改時間追蹤、年齡計算、報表區間篩選等常見需求。注意時區一致性與應用層驗證,避免「不嚴格日期」導致的邏輯錯誤。