直接说一下答案就是: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的进制,可以使用浮点数存储。
实际上也是这样的,时间戳默认精度也是秒,现代操作系统使用浮点数存储时间,因此可以获取到更小的时间。