日期时间类型要点
- DATE 只存日期,生日、上架日用它最干净
- TIME 存时长或时刻,可表示负时间表示间隔
- YEAR 只存年份,占用最小只有 1 字节
- DATETIME 范围到 9999 年,写入什么存什么不受时区影响
- TIMESTAMP 范围只到 2038 年,可设默认当前时间自动填
- 需要自动记录创建或更新时间,优先 TIMESTAMP 加自动更新
日期时间类型示例
CREATE TABLE orders (
id BIGINT UNSIGNED PRIMARY KEY,
created_at DATETIME NOT NULL,
paid_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
日期时间类型对照
| 类型 | 占用 | 取值范围 | 格式 | 用途 |
|---|---|---|---|---|
| DATE | 3 字节 | 1000-01-01 到 9999-12-31 | YYYY-MM-DD | 生日、日期 |
| TIME | 3 字节 | -838:59:59 到 838:59:59 | HH:MM:SS | 时长、时刻 |
| YEAR | 1 字节 | 1901 到 2155 | YYYY | 年份 |
| DATETIME | 8 字节 | 1000-01-01 00:00:00 到 9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 订单时间 |
| TIMESTAMP | 4 字节 | 1970-01-01 到 2038-01-19 | YYYY-MM-DD HH:MM:SS | 自动时间戳 |
避坑提醒:TIMESTAMP 上限 2038 年,做长期归档或历史数据别用它,老系统都踩过这个坑。