Skip to content

不要用字符串存储日期

  1. 占用的空间更大!
  2. 无法用日期相关的 API 进行计算和比较。 3. 比如寻找每个周日的数据,就会很麻烦

Datetime 和 Timestamp

时区信息

  • DateTime没有,不同时区读取到的时间一样(不会根据地区进行相应的转换)
  • Timestamp有,不同时区读取到转换后的值(不一样)

占用空间

  • DateTime 的范围是 5~8 字节
  • Timestamp 的范围是 4~7 字节。

表示范围

  • DateTime:1000-01-01 00:00:00.000000 ~ 9999-12-31 23:59:59.499999
  • Timestamp:1970-01-01 00:00:01.000000 ~ 2038-01-19 03:14:07.499999

性能

  • TIMESTAMP 需要根据时区进行转换,效率较低
  • DATETIME 不涉及时区转换,所以不会有这个问题。

数值时间戳是更好的选择吗?

很多时候,我们也会使用 int 或者 bigint 类型的数值也就是数值时间戳来表示时间。

这种存储方式的具有 Timestamp 类型的所具有一些优点,并且使用它的进行日期排序以及对比等操作的效率会更高,跨系统也很方便,毕竟只是存放的数值。缺点也很明显,就是数据的可读性太差了,你无法直观的看到具体时间。

类型存储空间日期格式日期范围是否带时区信息
DATETIME5~8 字节YYYY-MM-DD hh:mm:ss[.fraction]1000-01-01 00:00:00[.000000] ~ 9999-12-31 23:59:59[.999999]
TIMESTAMP4~7 字节YYYY-MM-DD hh:mm:ss[.fraction]1970-01-01 00:00:01[.000000] ~ 2038-01-19 03:14:07[.999999]
数值型时间戳4 字节全数字如 15787076121970-01-01 00:00:01 之后的时间

正在精进