暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL表时间列用datetime还是timestamp?

Tonyhacks 2023-08-22
739

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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论