关于MYSQL时时间类型选取以及不同版本长度

MySql的时间字段用:Date、Datetime和Timestamp。

(1)“Date”数据类型:用于存储没有时间的日期。Mysql获取并显示此类型的格式为“YYYY-MM-DD”支持的时间长度范围是“1000-00-00”至“9999–12-31”。

(2)“Datetime”类型:存储日期和时间的数据。存储和显示格式为“yyyy-mm-dd hh:mm:ss”支持的时间长度范围是“1000-00-00 00:00:00”到“9999-12-31 23:59:59”。

(3)“Timestamp”类型:存储日期和时间的数据。存储和显示格式与日期时间相同。支持的时间长度范围是“1970-01-01 00:00:01”到“2038-01-19 03:14:07”。

在MySql5.6.4版本之前给以上时间类型指定长度不支持。

在此之后支持给以上数据类型支持微秒的存储以及显示,在存储的时候可以指定微秒的精度。

如下 长度为6的时间存储范围为

`gmt_modified` datetime(6) NOT NULL COMMENT 'modified time',   2021-09-03 16:14:22.000000

“Datetime”和“Timestamp”区别

(1)首先两者的占用空间不同

类型 占用字节 表示形式
datetime 8字节 yyyy-mm-dd hh:mm:ss
timestamp 4字节 yyyy-mm-dd hh:mm:ss

(2)表示范围

类型 表示范围
datetime “1000-00-00 00:00:00”到“9999-12-31 23:59:59”
timestamp “1970-01-01 00:00:01”到“2038-01-19 03:14:07”

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

(3)时区问题

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

​ datetime占用8个字节,不会进行时区的检索。

​ 也就是说对于timstamp来说,如果储存的时区和检索时的时区不一样,那么拿出来的数据也不一样。对于datetime来说则没有影响,存什么拿什么。

​ 还有一点如果存进去的是NULL,timestamp会自动存储当前时间而datetime则存储NULL;

(4)选择

​ 如果在时间上要超过 Linux 时间的,或者想要使用自动插入时间或者自动更新时间功能的,timestamp 会随时区变化而变化,服务器时区不一样,应该用 timestamp。

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

​ 如果只是当初存储创建时间,以及修改时间不存在跨时区的场景 基于mysql性能优先考虑timstamp

1 个赞