数据库如何存储时间

参考:

https://juejin.im/post/5e1d494a5188254c45778a14


不要使用字符串存储时间

问题:

  • 字符串占用的空间更大

  • 比较效率低(逐个字符比较),无法用日期相关的API进行计算

Datetime和Timestamp

一般来讲选择Timestamp,why?

  • 从时区上:

    Datetime类型保存的时间都是当前会话所设置的时区对应的时间,如果时区更换后,就会导致从数据库读取的时间有问题,而Timestamp是和时区有关的,他的值会随着时区的变化而变化(自动换算)

  • 从耗费的空间上:

    DateTime类型耗费的空间更大,DateTime使用8个字节的存储空间,而Timestamp使用4个字节,也同样导致一个问题,Timestamp能表示的最大时间比DateTime小

    1
    2
    DateTime1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
    Timestamp1970-01-01 00:00:01 ~ 2037-12-31 23:59:59

    Timestamp 在不同版本的 MySQL 中有细微差别。

    官方参考:

     https://dev.mysql.com/doc/refman/8.0/en/storage-requirements.html 
    
     https://dev.mysql.com/doc/refman/8.0/en/datetime.html
    

除此之外还可以使用intbigint存储时间戳,对比和进行日期排序和对比等操作效率会更高,但是缺点也很明显,就是不能够直观的显示具体的时间,可读性差

其他

一些关于Mysql时区设置的常用命令

1
2
3
4
5
6
7
8
9
10
# 查看当前会话时区
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';
文章作者: C.c
文章链接: https://liquidcat.cc/数据库如何存储时间.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Me