前言
在掘金小册逛大佬博客的时候发现一个以前没咋注意到的知识点,所以突然兴趣来了,决定写篇博客。
正文
我相信大半部分人在设置时间的时候还是在使用datetime这个类型或者String类型用来存储吧?其他的不知道反正我看我们公司开发的时候挺多人用datetime的,有一说一我以前也老用。
那么这篇博客我就是想告诉自己和你们强烈推荐使用timestamp类型,那么我们来看看为啥。
一、时区
- DateTime 类型是没有时区信息的(时区无关),DateTime 类型保存的时间都是当前会话所设置的时区对应的时间,它与时区无关,存入的是什么值就是什么值,不会根据当前时区进行转换。这样就会有什么问题呢?当你的时区更换之后,比如你的服务器更换地址或者更换客户端连接时区设置的话,就会导致你从数据库中读出的时间错误。
- Timestamp 类型字段的值会随着服务器时区的变化而变化,自动换算成相应的时间,说简单点就是在不同时区,查询到同一个条记录此字段的值会不一样。
+---------------------+---------------------+
| date_time | time_stamp |
+---------------------+---------------------+
| 2020-01-11 09:53:32 | 2020-01-11 09:53:32 |
+---------------------+---------------------+
如果修改服务器时区
set time_zone='+8:00';
结果
+---------------------+---------------------+
| date_time | time_stamp |
+---------------------+---------------------+
| 2020-01-11 09:53:32 | 2020-01-11 17:53:32 |
+---------------------+---------------------+
二、所占存储空间不同
- 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
至于起始时间为什么不同可以自行百度linux时间戳
所占存储空间决定了它能够表达时间范围。
总结
TimeStamp在空间消耗与时区转换方面都是由于DateTime,但是所能表达时间范围小于DateTime,所以在可以选择的情况下我还是优先推荐使用TimeStamp类型,但到底要用什么还是需要根据业务需求。