时间戳(timestamp)和 datetime的区别

今天在设计数据库表的时候需要给created_time updated_time 分配数据存储类型

想到存时间戳(timestamp)和 datetime的区别 。

问了一下chat:

请问 timestamp这个从1970年开始的时间戳 和正常使用的 datetime有什么区别吗

在关系数据库中,TIMESTAMPDATETIME 是表示日期和时间的数据类型,它们在功能上有一些区别:

  1. 范围和存储方式

    • DATETIME 数据类型存储范围是 '1000-01-01 00:00:00''9999-12-31 23:59:59'占用 8 字节的存储空间。                                                        
    • TIMESTAMP 数据类型存储范围是 '1970-01-01 00:00:01' UTC 到 '2038-01-19 03:14:07' UTC,占用 4 字节的存储空间。这个范围受限于 32 位整数的最大值,因此存在所谓的“2038年问题”。

                注:UTC格林威治时间(1)↓↓↓↓↓

  1. 时区处理

    • DATETIME 不会考虑时区,它是存储特定日期和时间的数据类型。
    • TIMESTAMP 存储的是相对于 UTC(协调世界时)的时间戳,并在存储时会将其转换为 UTC,读取时也会根据当前时区进行相应的转换。
  2. 自动更新行为

    • 在 MySQL 中,TIMESTAMP 类型的列可以设置为默认值为 CURRENT_TIMESTAMP,这样当一行数据被创建或更新时,这个字段会自动记录当前的时间戳。而 DATETIME 类型的列需要在插入或更新数据时手动指定值。
  3. 存储空间

    • TIMESTAMP 占用的存储空间更小,因为它只存储了一个时间戳,而不是完整的日期和时间信息。

总的来说,TIMESTAMP 更适合用于记录与时间相关的操作,尤其是需要考虑时区的情况,而 DATETIME 更适合用于存储特定的日期和时间信息,不涉及时区转换。

        为什么会有2038年危机 。

在一般的电脑中,int占用4字节,32比特,数据范围为-2147483648~2147483647[-2^31~2^31-1]

无符号整型(unsigned int )占4个字节,范围 0 ~ 4294967295

时间戳(timestamp)和 datetime的区别_第1张图片

(1):在19世纪末和20世纪初,国际上为了解决全球航海和铁路运输中出现的时间标准问题,选择了格林威治天文台的子午线作为参考点。1884年,格林威治子午线被选定为国际时间的基准线,也就是世界时(UTC)的起点。这条子午线穿过伦敦郊区的格林威治天文台。

协调世界时(UTC)是世界上的标准时间。它是基于原子钟的时间,被视为全球的时间标准,不受任何地区或国家的影响。UTC 不受太阳时间、地球自转等因素影响,是一种由国际原子时(TAI)通过精确的原子钟测量得出的时间标准。

        为什么是1970年?        

因为Unix 操作系统 在1969年开始被开发,在1971年正式被发表,所以最初规定的时间戳是从 1971 年1月1日 00:00:00开始,但是后来为了方便计算就取了个整数,就改到了1970年

你可能感兴趣的:(数据库)