Mysql时间类型之timestamp与datetime

前言

在掘金小册逛大佬博客的时候发现一个以前没咋注意到的知识点,所以突然兴趣来了,决定写篇博客。

正文

我相信大半部分人在设置时间的时候还是在使用datetime这个类型或者String类型用来存储吧?其他的不知道反正我看我们公司开发的时候挺多人用datetime的,有一说一我以前也老用。

那么这篇博客我就是想告诉自己和你们强烈推荐使用timestamp类型,那么我们来看看为啥。

一、时区

  1. DateTime 类型是没有时区信息的(时区无关),DateTime 类型保存的时间都是当前会话所设置的时区对应的时间,它与时区无关,存入的是什么值就是什么值,不会根据当前时区进行转换。这样就会有什么问题呢?当你的时区更换之后,比如你的服务器更换地址或者更换客户端连接时区设置的话,就会导致你从数据库中读出的时间错误。
  2. 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 |
+---------------------+---------------------+

二、所占存储空间不同

  1. DateTime类型占存储空间八个字节所以它可以表示的时间是:1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
  2. TimeStamp类型占存储空间四个字节所以它可以表示的时间是1970-01-01 00:00:01 ~ 2037-12-31 23:59:59
    至于起始时间为什么不同可以自行百度linux时间戳
    所占存储空间决定了它能够表达时间范围。

总结

TimeStamp在空间消耗与时区转换方面都是由于DateTime,但是所能表达时间范围小于DateTime,所以在可以选择的情况下我还是优先推荐使用TimeStamp类型,但到底要用什么还是需要根据业务需求。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值