关于数据库存储时间的一些思考

  1. 不要用字符串存储日期
  2. DateTime和TimeStamp之间的选择
    2.1 DateTime没有时区信息
    2.2 DateTime类型耗费更大的空间
  3. 数值型时间戳
  4. 总结

1. 不要用字符串存储日期

字符串存储存在的问题:

  • 空间,字符串占用更大的空间
  • 效率,字符串存储日期效率较低(逐个字符比对),无法用日期相关的 API 进行计算和比较。

2. DateTime和TimeStamp之间的选择

通常首选Timestamp

2.1 DateTime没有时区信息

DateTime 类型是没有时区信息的(时区无关),DateTime 类型保存的时间都是当前会话所设置的时区对应的时间。所以当时区更换之后,比如服务器更换地址或者更换客户端连接时区设置的话,就会导致从数据库中读出的时间错误。

Timestamp 和时区有关。Timestamp 类型字段的值会随着服务器时区的变化而变化,自动换算成相应的时间,也就是说在不同时区,查询到同一个条记录此字段的值会不一样。

一些关于MySQL时区设置一个常用sql命令

# 查看当前会话时区
SELECT @@session.time_zone;
# 设置当前会话时区
SET time_zone = 'Europe/Helsinki';
SET time_zone = "+00:00";
# 数据库全局时区设置
SELECT @@global.time_zone;
# 设置全局时区
SET GLOBAL time_zone = '+8:00';
SET GLOBAL time_zone = 'Europe/Helsinki';

2.2 DateTime类型耗费更大的空间

Timestamp 只需要使用 4 个字节的存储空间,但是 DateTime 需要耗费 8 个字节的存储空间。但是,这样同样造成了一个问题,Timestamp 表示的时间范围更小。

  • DateTime :1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
  • Timestamp: 1970-01-01 00:00:01 ~ 2037-12-31 23:59:59

3. 数值型时间戳

有时也会用 int 或者 bigint 类型的数值也就是时间戳来表示时间。

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

数据型时间戳在数据库中实际操作

4. 总结

各种日期类型对比
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。