参考文档:mysql-datetime
一、简单对比
对比项 | 表示的时间范围 | 时区处理 | 默认值和自动更细 |
---|---|---|---|
datetime | '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 | 从当前时区转换为UTC存储,并从UTC转回当前时区以供检索 | 支持 |
二、总结
总结一下,区别有:
- 对时区的支持不同
- timestamp类型,在存储时从当前时区转换为UTC存储,检索时从UTC转回当前时区以供检索。
- datetime没有对时区的特殊处理。
- 表示的时间范围不同
- timestamp表示时间范围是[1970-01-01,2038-01-19],如果给一个timestamp类型的字段设置一个超过2038-01-19的值,最终存储到数据库的值为0000-00-00 00:00:00。
- datetime表示的时间范围更大:[1000-01-01,9999-99-99]。
三、设置默认值和自动更新策略的方式:
DEFAULT关键字设置默认值;
ON UPDATE 关键字设置更新策略;两者互相独立。
CREATE TABLE t1 (
ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
dt DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP //在一些低版本的mysql上不支持
);
网友评论