DATETIME和TIMESTAMP都是用于存储时间的MySQL数据类型,但它们有一些关键的区别。
| 属性 | DATETIME | TIMESTAMP |
|---|---|---|
| 存储范围 | 1000-01-01 00:00:00 到 9999-12-31 23:59:59 | 1970-01-01 00:00:01 UTC 到 2038-01-19 03:14:07 UTC |
| 精度 | 毫秒 | 秒 |
| 默认值 | NULL | CURRENT_TIMESTAMP |
| 时区处理 | 不处理 | 会根据服务器的时区进行转换 |
| 性能 | 无索引的情况下,TIMESTAMP 略高于 DATETIME;有索引的情况下,TIMESTAMP 略低于 DATETIME | 无索引的情况下,TIMESTAMP 略高于 DATETIME;有索引的情况下,DATETIME 略高于 TIMESTAMP |
DATETIME
- 优点:
- 存储范围更广
- 精度更高
- 默认值为 NULL,可以手动指定
- 不处理时区,可以避免时区转换带来的麻烦
- 缺点:
- 性能略低于 TIMESTAMP
TIMESTAMP
- 优点:
- 默认值为 CURRENT_TIMESTAMP,可以自动填充当前时间
- 会根据服务器的时区进行转换,方便跨时区查询
- TIMESTAMP 支持每次更新记录时,自动更新当前时间。updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
- 缺点:
- 存储范围较小
- 精度略低于 DATETIME
- 会处理时区,可能会导致时区转换带来的麻烦
选择建议
- 如果需要存储的时间范围较广,或者需要存储毫秒级的精度,建议使用 DATETIME。
- 如果需要自动填充当前时间,或者需要跨时区查询,建议使用 TIMESTAMP。
- 如果对性能要求较高,建议使用 DATETIME。
举例说明
- 存储事件的发生时间、任务的截止时间,建议使用 DATETIME。
- 存储用户登录时间或最后更新时间,建议使用 TIMESTAMP。
当然,具体选择哪种数据类型,还需要根据具体的业务需求来决定。
最后修改时间:2023-08-22 22:36:52
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




