MySQL 中 datetime 和 timestamp 的区别与选择

 更新时间:2021年09月26日 10:33:22   作者:程淇铭  
MySQL 中常用的两种时间储存类型分别是datetime和 timestamp。如何在它们之间选择是建表时必要的考虑。下面就谈谈他们的区别和怎么选择,需要的朋友可以参考一下

MySQL 中常用的两种时间储存类型分别是datetimetimestamp。如何在它们之间选择是建表时必要的考虑。下面就谈谈他们的区别和怎么选择。

1 区别

1.1 占用空间

类型 占据字节 表示形式
datetime 8 字节 yyyy-mm-dd hh:mm:ss
timestamp 4 字节 yyyy-mm-dd hh:mm:ss

1.2 表示范围

类型 表示范围
datetime '1000-01-01 00:00:00.000000' to '9999-12-31 23:59:59.999999'
timestamp '1970-01-01 00:00:01.000000' to '2038-01-19 03:14:07.999999'

timestamp翻译为汉语即"时间戳",它是当前时间到 Unix元年(1970 年 1 月 1 日 0 时 0 分 0 秒)的秒数。对于某些时间的计算,如果是以 datetime 的形式会比较困难,假如我是 1994-1-20 06:06:06 出生,现在的时间是 2016-10-1 20:04:50 ,那么要计算我活了多少秒钟用 datetime 还需要函数进行转换,但是 timestamp 直接相减就行。

1.3 时区

timestamp 只占 4 个字节,而且是以utc的格式储存, 它会自动检索当前时区并进行转换。

datetime以 8 个字节储存,不会进行时区的检索.

也就是说,对于timestamp来说,如果储存时的时区和检索时的时区不一样,那么拿出来的数据也不一样。对于datetime来说,存什么拿到的就是什么。

还有一个区别就是如果存进去的是NULL,timestamp会自动储存当前时间,而 datetime会储存 NULL。

2 测试

我们新建一个表

插入数据

查看数据,可以看到存进去的是NULLtimestamp会自动储存当前时间,而 datetime会储存NULL

把时区修改为东 9 区,再查看数据,会会发现 timestamp datetime 多一小时

如果插入的是无效的呢?假如插入的是时间戳

结果是0000-00-00 00:00:00,根据官方的解释是插入的是无效的话会转为 0000-00-00 00:00:00,而时间戳并不是MySQL有效的时间格式。

那么什么形式的可以插入呢,下面列举三种

//下面都是 MySQL 允许的形式,MySQL 会自动处理
2016-10-01 20:48:59
2016#10#01 20/48/59
20161001204859

3 选择

如果在时间上要超过Linux时间的,或者服务器时区不一样的就建议选择 datetime

如果是想要使用自动插入时间或者自动更新时间功能的,可以使用timestamp

如果只是想表示年、日期、时间的还可以使用 yeardatetime,它们分别占据 1、3、3 字节,而datetime就是它们的集合。

到此这篇关于MySQL datetime timestamp 的区别与选择的文章就介绍到这了,更多相关MySQL 中 datetime timestamp 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • mysql5.6安装配置方法图文教程

    mysql5.6安装配置方法图文教程

    这篇文章主要为大家分享了mysql5.6安装配置方法图文教程,感兴趣的朋友可以参考一下
    2016-06-06
  • MySQL需要关注的参数及状态变量解读

    MySQL需要关注的参数及状态变量解读

    这篇文章主要介绍了MySQL需要关注的参数及状态变量解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • 分析一条sql的性能的标准总结

    分析一条sql的性能的标准总结

    在本篇文章里小编给各位分享了关于分析一条sql的性能的相关知识点总结内容,有兴趣的朋友们学习下。
    2019-07-07
  • Prometheus 监控MySQL使用grafana展示

    Prometheus 监控MySQL使用grafana展示

    这篇文章主要介绍prometheus通过mysql exporter+node exporter监控mysql,并使用grafana进行图表展示的相关内容,感兴趣的效果版可以参考下文
    2021-08-08
  • mysql 正确清理binlog日志的两种方法

    mysql 正确清理binlog日志的两种方法

    这篇文章主要介绍了mysql 正确清理binlog日志的相关资料,需要的朋友可以参考下
    2017-07-07
  • MySQL数据库查看数据表占用空间大小和记录数的方法

    MySQL数据库查看数据表占用空间大小和记录数的方法

    这篇文章主要介绍了MySQL数据库查看数据表占用空间大小和记录数的方法,如果想知道MySQL数据库中每个表占用的空间、表记录的行数的话,可以打开MySQL的information_schema 数据库查询,本文就讲解查询方法,需要的朋友可以参考下
    2015-04-04
  • MySQL系列之十四 MySQL的高可用实现

    MySQL系列之十四 MySQL的高可用实现

    这篇文章主要介绍了MySQL系列之十四 MySQL的高可用实现,从工作原理到具体的技术实现,本文详细的讲述了该项技术,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • 一文带你了解MySQL中的锁机制

    一文带你了解MySQL中的锁机制

    锁是计算机协调多个进程或线程并发访问某一资源的机制(避免争抢)。本文就来通过几个简单的实力为大家详细讲讲MySQL中的锁机制吧
    2023-02-02
  • Nacos配置MySQL8的方法

    Nacos配置MySQL8的方法

    这篇文章主要介绍了Nacos配置MySQL8的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • MySQL数据库之内置函数和自定义函数 function

    MySQL数据库之内置函数和自定义函数 function

    这篇文章主要介绍了MySQL数据库之内置函数和自定义函数 function,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感兴趣的小伙伴可以参考一下
    2022-06-06

最新评论