每天一道面试题之-mysql中datetime和timestamp的区别

2023-07-08 17:16:37 浏览数 (3)

前言:

了不起:学弟,我看你最近在学习MySQL啊?学的怎么样啊,要不要我考考你啊?

学弟:哈哈,是啊,最近学的不错,感觉自己很强。

了不起翻了个白眼:我问你,MySQL里面的字段类型datetime和timestamp有什么区别?

学弟:嗯。。。我就知道这两个都是时间,具体怎么样我还真的不知道。。了不起:让你再嘚瑟!我给你讲讲吧!

正文:

首先,我跟你说一个我以前遇到的一个生产问题。

项目背景:会员系统,出了个大会员活动,这个活动就是惊喜价XXX元买终身10年大会员。每个用户都有一个字段是会员到期日。这个字段用的就是timestamp。

问题就来了,假设现在2018年,有的人买了20年的会员,问题就出现了。数据库报错,用户的会员截止日还是第一个10年会员的截止日期。

业务框框找上门来,我们也是迅速看生产日志去查找问题。一看到报错我们也就明白是啥问题了。相信看到这里,学习过这两个参数的同学就能明白,原因就出在timestamp的时间是有范围的。

  1. 时间范围不同,通过我讲的这个生产问题,我们第一个得出的结论就是时间范围不同。timestamp的范围是有限制的,而datetime的时间是没有限制的。 timestamp的范围是从1970-01-01 到2038-01-19,这也就是为什么上面的生产问题会报错的原因。2018年,买了20年的会员就到了2038年,只要过了1-19号,那么用timestamp就会出现错误。

2.timestamp和datetime占用大小不一样。

在v5.6.4之前的版本。datetime占8个字节,timestamp占4个字节。

在这个版本之后datetime和timestamp占用的字节数都有一定程度的减少,并且根据是否有秒的小数的情况,相对应生成浮动大小。

3.timestamp会根据时区的情况进行时间转换,假设当前存储的时区和检索的时区有差异,那么timestamp会根据检索的时区进行转换。

而datetime就不会,datetime是属于你给他什么他就拿到什么,没有timestamp得这个功能。

4.二者存储null时有不同的效果,如果你的时间是datetime那么datetime就会把null存入进去,如果你用的是timestamp,那么timestamp会根据现有的时间帮你插入。

对于二者的区别就介绍的差不多了,在我们开发的实际情况中,要根据实际的业务情况去选择时使用timestamp还是datetime,如果没有什么特殊的需求,那就用timedate即可

建议使用timestamp的情况

1.当我们存储时间范围是比较小的时候。

2.当时间精度要求比较高的时候,timestamp可以达到的精度是纳秒级别。

3.需要使用默认值为当前时间的。

建议使用datetime 的情况

1.存储时间范围较大的时间。

2.需要存储时间与时区无关的情况。

结尾:

学到这里大家也应该明白了,这个生产问题的前后的原因,也明白了mysql中timestamp和datetime的区别啦。

我是了不起
和我一起学习更多精彩知识!!!

0 人点赞