• MySQL中datetime和timestamp的区别


    # MySQL中datetime和timestamp的区别

    相同点

    1. 两个数据类型存储时间的格式一致。均为 YYYY-MM-DD HH:MM:SS
    2. 两个数据类型都包含「日期」和「时间」部分。
    3. 两个数据类型都可以存储微秒的小数秒(秒后6位小数秒)

    自动更新和默认值

    • TIMESTAMP
      • 支持默认值为当前时间,且在记录更新时可以自动更新为当前时间。
      • 例如,DEFAULT CURRENT_TIMESTAMPON UPDATE CURRENT_TIMESTAMP
    • DATETIME
      • 从MySQL 5.6.5开始,支持DEFAULT CURRENT_TIMESTAMPON UPDATE CURRENT_TIMESTAMP
      • 在此之前不支持自动设置当前时间。

    区别

    1. 占用空间

    • TIMESTAMP :占 4 个字节(小数秒+3 个字节)
    • DATETIME:在 MySQL 5.6.4 之前,占 8 个字节 ,之后版本,占 5 个字节。(小数秒+3 个字节)
    类型 占据字节 表示形式
    timestamp 4 字节 yyyy-mm-dd hh:mm:ss
    datetime 8(5) 字节 yyyy-mm-dd hh:mm:ss

    2. 表示范围

    类型 表示范围
    datetime '1000-01-01 00:00:00.000000' to '9999-12-31 23:59:59.999999'
    timestamp '1970-01-01 00:00:01.000000' to '2038-01-19 03:14:07.999999'

    timestamp翻译为汉语即"时间戳",它是当前时间到 Unix元年(1970 年 1 月 1 日 0 时 0 分 0 秒)的秒数。对于某些时间的计算,如果是以 datetime 的形式会比较困难,假如我是 1994-1-20 06:06:06 出生,现在的时间是 2016-10-1 20:04:50 ,那么要计算我活了多少秒钟用 datetime 还需要函数进行转换,但是 timestamp 直接相减就行。

    3. 时区(存入时间是否会自动转换?)

    timestamp 只占 4 个字节,而且是以utc的格式储存, 它会自动检索当前时区并进行转换。

    datetime以 8 个字节储存,不会进行时区的检索.

    也就是说,对于timestamp来说,如果储存时的时区和检索时的时区不一样,那么拿出来的数据也不一样。对于datetime来说,存什么拿到的就是什么。

    4.使用 now() 存储当前时间时,保存的实际值,是否与当前计算机时间一致?

    • TIMESTAMP:可能不一致。存储值会被转换成 UTC 时间值再存入数据库。
    • DATETIME:与当前时间是一致的。

    5.如果存入的是 NULL 时,两个类型如何存储?

    • TIMESTAMP:会自动存储当前时间( now() )。
    • DATETIME:不会自动存储当前时间,会直接存入 NULL 值。

    时间复杂度

    • TIMESTAMP
      • 插入和检索时间复杂度为O(1),因为存储的是一个整数值(Unix时间戳)。
      • 需要进行时区转换,可能会在某些操作上稍微增加时间。
    • DATETIME
      • 插入和检索时间复杂度也为O(1),直接存储和检索“YYYY-MM-DD HH:MM”格式的字符串。
      • 不涉及时区转换,因此在某些操作上可能更快。

    选择

    如果在时间上要超过Linux时间的,或者服务器时区不一样的就建议选择 datetime

    如果只是想表示年、日期、时间的还可以使用 yeardatetime,它们分别占据 1、3、3 字节,而datetime就是它们的集合。

    如果数据库中有timestamp类型的字段,mysql数据库不管是迁库,还是集群,都一定要保证时区的相同。如果mysql集群中的数据库时区不一致,timestamp的字段将会造成数据不一致的情况发生。 在迁移库或者搭建集群时一定检查时区,保证时区的相同。中国时区默认是+8,所以不管是单节点mysql,还是mysql集群,我们第一件事就是应该将当前时区time_zone设置为+8:00

    参考文章

    MySQL中datetime和timestamp的区别 - 掘金 (juejin.cn)


    __EOF__

  • 本文作者: 海山了
  • 本文链接: https://www.cnblogs.com/seamount3/p/18293897
  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。
  • 相关阅读:
    Nacos配置管理-统一配置管理、配置自动刷新、多环境多服务共享配置
    Elasticsearch实战(十八)--ES搜索Doc Values/Fielddata 正排索引 深入解析
    HTML5期末考核大作业,网站——青岛民俗 7页。 美丽家乡 学生旅行 游玩 主题住宿网页
    LeeCode第 312 场周赛
    游戏攻略综述
    力扣打卡之最小栈
    c语言:查漏补缺(二)
    REGION IN TRANSITION问题
    21天经典算法之直接选择排序
    js中的promise函数(ES6)
  • 原文地址:https://www.cnblogs.com/seamount3/p/18293897