Skip to content
RuaRuan
返回

MySQL 中的 DATE、DATETIME 和 TIMESTAMP

1. 存储范围与格式

DATE:仅存储日期,格式 YYYY-MM-DD,范围 1000-01-01 至 9999-12-31,适合只需精确到天的场景。

DATETIME:存储日期+时间,格式 YYYY-MM-DD HH:MM:SS,范围 1000-01-01 00:00:00 至 9999-12-31 23:59:59,不受时区影响。

TIMESTAMP:同样存储日期+时间,但范围较小,仅 1970-01-01 00:00:01 UTC 至 2038-01-19 03:14:07 UTC,受 Unix 时间戳限制。

2. 时区处理

DATETIME:存储的是绝对时间,写入和读取不做时区转换。

TIMESTAMP:存储时会转换为 UTC,读取时再转换为当前时区,适合跨时区系统,避免显示混乱。

3. 存储空间与特性

DATETIME:占 8 字节,无自动更新时间特性。

TIMESTAMP:占 4 字节,支持 DEFAULT CURRENT_TIMESTAMP 和 ON UPDATE CURRENT_TIMESTAMP 自动记录修改时间,节省空间但有 2038 年问题。

4. 典型应用场景

DATE:生日、节假日等仅需日期的字段。

DATETIME:需要跨时区保持一致的绝对时间,如注册时间、历史记录。

TIMESTAMP:需要本地化显示时间、自动更新时间或节省存储空间的高频记录,如日志、订单修改时间。

示例:

— 记录绝对时间(不随时区变化)

CREATE TABLE users (

	id INT PRIMARY KEY AUTO_INCREMENT,
	
	username VARCHAR(50),
	
	register_time DATETIME DEFAULT NOW()

);

— 记录本地化时间并自动更新时间

CREATE TABLE orders (

	order_id INT PRIMARY KEY AUTO_INCREMENT,
	
	create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
	
	update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

);

选择建议: 若需跨时区一致性或超长时间范围,用 DATETIME;若需时区转换、自动更新时间或节省空间,用 TIMESTAMP。



下一篇
Java 中 sun.jnu.encoding 的作用与设置方法