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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 每天一道面试题之-mysql中datetime和timestamp的区别

前言:

了不起:学弟,我看你最近在学习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的区别啦。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
存储 SQL 关系型数据库
MySQL进阶突击系列(03) MySQL架构原理solo九魂17环连问 | 给大厂面试官的一封信
本文介绍了MySQL架构原理、存储引擎和索引的相关知识点,涵盖查询和更新SQL的执行过程、MySQL各组件的作用、存储引擎的类型及特性、索引的建立和使用原则,以及二叉树、平衡二叉树和B树的区别。通过这些内容,帮助读者深入了解MySQL的工作机制,提高数据库管理和优化能力。
|
2月前
|
存储 SQL 关系型数据库
mysql 的ReLog和BinLog区别
MySQL中的重做日志和二进制日志是确保数据库稳定性和可靠性的关键组件。重做日志主要用于事务的持久性和原子性,通过记录数据页的物理修改信息来恢复未提交的事务;而二进制日志记录SQL语句的逻辑变化,支持数据复制、恢复和审计。两者在写入时机、存储方式及配置参数等方面存在显著差异。
|
20天前
|
存储 关系型数据库 MySQL
美团面试:MySQL为什么 不用 Docker部署?
45岁老架构师尼恩在读者交流群中分享了关于“MySQL为什么不推荐使用Docker部署”的深入分析。通过系统化的梳理,尼恩帮助读者理解为何大型MySQL数据库通常不使用Docker部署,主要涉及性能、管理复杂度和稳定性等方面的考量。文章详细解释了有状态容器的特点、Docker的资源隔离问题以及磁盘IO性能损耗,并提供了小型MySQL使用Docker的最佳实践。此外,尼恩还介绍了Share Nothing架构的优势及其应用场景,强调了配置管理和数据持久化的挑战。最后,尼恩建议读者参考《尼恩Java面试宝典PDF》以提升技术能力,更好地应对面试中的难题。
|
2天前
|
SQL 关系型数据库 MySQL
京东面试:MySQL MVCC是如何实现的?如何通过MVCC实现读已提交、可重复读隔离级别的?
1.请解释什么是MVCC,它在数据库中的作用是什么? 2.在MySQL中,MVCC是如何实现的?请简述其工作原理。 3.MVCC是如何解决读-写和写-写冲突的? 4.在并发环境中,当多个事务同时读取同一行数据时,MVCC是如何保证每个事务看到的数据版本是一致的? 5.MVCC如何帮助提高数据库的并发性能?
京东面试:MySQL MVCC是如何实现的?如何通过MVCC实现读已提交、可重复读隔离级别的?
|
23天前
|
Java 程序员 调度
Java 高级面试技巧:yield() 与 sleep() 方法的使用场景和区别
本文详细解析了 Java 中 `Thread` 类的 `yield()` 和 `sleep()` 方法,解释了它们的作用、区别及为什么是静态方法。`yield()` 让当前线程释放 CPU 时间片,给其他同等优先级线程运行机会,但不保证暂停;`sleep()` 则让线程进入休眠状态,指定时间后继续执行。两者都是静态方法,因为它们影响线程调度机制而非单一线程行为。这些知识点在面试中常被提及,掌握它们有助于更好地应对多线程编程问题。
55 9
|
28天前
|
安全 Java 程序员
Java面试必问!run() 和 start() 方法到底有啥区别?
在多线程编程中,run和 start方法常常让开发者感到困惑。为什么调用 start 才能启动线程,而直接调用 run只是普通方法调用?这篇文章将通过一个简单的例子,详细解析这两者的区别,帮助你在面试中脱颖而出,理解多线程背后的机制和原理。
60 12
|
26天前
|
编译器 Android开发 开发者
Android经典面试题之Kotlin中Lambda表达式和匿名函数的区别
Lambda表达式和匿名函数都是Kotlin中强大的特性,帮助开发者编写简洁而高效的代码。理解它们的区别和适用场景,有助于选择最合适的方式来解决问题。希望本文的详细讲解和示例能够帮助你在Kotlin开发中更好地运用这些特性。
29 9
|
2月前
|
存储 缓存 关系型数据库
【MySQL进阶篇】存储引擎(MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案)
MySQL的存储引擎是其核心组件之一,负责数据的存储、索引和检索。不同的存储引擎具有不同的功能和特性,可以根据业务需求 选择合适的引擎。本文详细介绍了MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案。
【MySQL进阶篇】存储引擎(MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案)
|
1月前
|
存储 SQL 关系型数据库
MySQL 面试题
MySQL 的一些基础面试题
|
2月前
|
Java
Java社招面试题:& 和 && 的区别,HR的套路险些让我翻车!
今日分享的主题是如何区分&和&&的区别,提高自身面试的能力。主要分为以下四部分。 1、自我面试经历 2、&amp和&amp&amp的不同之处 3、&对&&的不同用回答逻辑解释 4、彩蛋

推荐镜像

更多