DOIFOR技术Mysql时间存储有了TIMESTAMP为什么还会有DATETIME
DOIFOR技术Mysql时间存储有了TIMESTAMP为什么还会有DATETIME

Mysql时间存储有了TIMESTAMP为什么还会有DATETIME

技术

直接说一下答案就是:timestamp存储的实际上是一个整型数值,长度是32bit,最大值快要到了。

SELECT DATE_FORMAT(FROM_UNIXTIME(2147483647), '%Y-%m-%d %H:%i:%s') AS max_timestamp;

结果为:2038-01-19 03:14:07

而datetime的存储结构是yyyy-MM-dd HH:mm:ss[.SSS] 类似字符串,实际上是分为日期和时间两个整型数值存储的,共占64bit,按照存储格式看,可以存储的最大时间是:9999-12-31 23:59:59,还早的很。如果有需要还可以将年份扩展到5位数甚至6位数,不过那个时候估摸着Mysql这个词都需要去从位大牛的墓穴里挖出来了…….

精度

默认情况下timestamp和datetime的精度都是到秒,为什么都是秒?

这个可以观察一下时间的换算关系:

  • 1 小时(h) = 60 分钟 (m)
  • 1分钟(m) = 60秒(s)
  • 1秒(s)= 1000毫秒(ms)
  • 1毫秒(ms) = 1000微秒(us)
  • 1微秒(us)= 1000纳秒(ns)

可以看到秒之后都是1000的进制,可以使用浮点数存储。

实际上也是这样的,时间戳默认精度也是秒,现代操作系统使用浮点数存储时间,因此可以获取到更小的时间。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注