首页 > 数据库 >MySQL中datetime和timestamp的区别

MySQL中datetime和timestamp的区别

时间:2024-07-10 13:41:46浏览次数:10  
标签:字节 timestamp TIMESTAMP datetime 时间 MySQL 时区

# MySQL中datetime和timestamp的区别

相同点

  1. 两个数据类型存储时间的格式一致。均为 YYYY-MM-DD HH:MM:SS
  2. 两个数据类型都包含「日期」和「时间」部分。
  3. 两个数据类型都可以存储微秒的小数秒(秒后6位小数秒)

自动更新和默认值

  • TIMESTAMP
    • 支持默认值为当前时间,且在记录更新时可以自动更新为当前时间。
    • 例如,DEFAULT CURRENT_TIMESTAMPON UPDATE CURRENT_TIMESTAMP
  • DATETIME
    • 从MySQL 5.6.5开始,支持DEFAULT CURRENT_TIMESTAMPON UPDATE CURRENT_TIMESTAMP
    • 在此之前不支持自动设置当前时间。

区别

1. 占用空间

  • TIMESTAMP :占 4 个字节(小数秒+3 个字节)
  • DATETIME:在 MySQL 5.6.4 之前,占 8 个字节 ,之后版本,占 5 个字节。(小数秒+3 个字节)
类型 占据字节 表示形式
timestamp 4 字节 yyyy-mm-dd hh:mm:ss
datetime 8(5) 字节 yyyy-mm-dd hh:mm:ss

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 直接相减就行。

3. 时区(存入时间是否会自动转换?)

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

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

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

4.使用 now() 存储当前时间时,保存的实际值,是否与当前计算机时间一致?

  • TIMESTAMP:可能不一致。存储值会被转换成 UTC 时间值再存入数据库。
  • DATETIME:与当前时间是一致的。

5.如果存入的是 NULL 时,两个类型如何存储?

  • TIMESTAMP:会自动存储当前时间( now() )。
  • DATETIME:不会自动存储当前时间,会直接存入 NULL 值。

时间复杂度

  • TIMESTAMP
    • 插入和检索时间复杂度为O(1),因为存储的是一个整数值(Unix时间戳)。
    • 需要进行时区转换,可能会在某些操作上稍微增加时间。
  • DATETIME
    • 插入和检索时间复杂度也为O(1),直接存储和检索“YYYY-MM-DD HH:MM”格式的字符串。
    • 不涉及时区转换,因此在某些操作上可能更快。

选择

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

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

如果数据库中有timestamp类型的字段,mysql数据库不管是迁库,还是集群,都一定要保证时区的相同。如果mysql集群中的数据库时区不一致,timestamp的字段将会造成数据不一致的情况发生。 在迁移库或者搭建集群时一定检查时区,保证时区的相同。中国时区默认是+8,所以不管是单节点mysql,还是mysql集群,我们第一件事就是应该将当前时区time_zone设置为+8:00

参考文章

MySQL中datetime和timestamp的区别 - 掘金 (juejin.cn)

标签:字节,timestamp,TIMESTAMP,datetime,时间,MySQL,时区
From: https://www.cnblogs.com/seamount3/p/18293897

相关文章

  • mysql数据库中毒恢复
    一、立即隔离受感染的系统断开网络连接:首先,立即断开受感染系统的网络连接,以防止病毒进一步传播或黑客获取更多敏感信息。隔离受感染设备:将受感染的计算机或服务器从网络中隔离出来,以避免对其他系统造成影响。二、评估损害范围检查日志文件:查看系统日志和MySQL日志文件,了解病毒......
  • 在命令行中连接mysql
    1.在mysql官网下载mysql软件,下载界面:https://dev.mysql.com/downloads/installer/ 选择合适的版本,进行下载2.在安装完成mysql后,在命令行输入mysql会提示不是内部外部命令,此时需要对mysql的系统变量进行配置:3.配置系统变量:第一步,右键“我的电脑”,选择“属性”-“高级系统......
  • 阿里云普罗米修斯接入mysql监控
    打开https://arms.console.aliyun.com/?spm=5176.12818093_-1363046575.ProductAndResource--ali--widget-product-recent.8.5cfe16d07QgyJq#/home     点击后,就会进入这里就是你的mysql服务器监控数据了 ......
  • Rocky Linux 9.4安装MySQL:使用RPM安装包方式
    RockyLinux9.4安装MySQL:使用RPM安装包方式一、安装环境安装环境如下:服务器:RockyLinux9.4安装版本:MySQL8.0.38二、安装过程和细节1、在官网下载RPM安装包官网下载地址如下,这个地址里有各个版本的安装包,根据自己的版本选择,下载对应系统的安装包https://dev.mysql.com/dow......
  • MySQL导入数据库报错#1118 - Row size too large ( 8126). 的解决方法
    导入SQL文件时报错(在执行创建表或者增加字段时,发现rowsize长度过长,会导致出现以下错误)[ERR]1118-Rowsizetoolarge(>8126).ChangingsomecolumnstoTEXTorBLOBorusingROW_FORMAT=DYNAMICorROW_FORMAT=COMPRESSEDmayhelp.Incurrentrowformat,BLOBprefix......
  • MySQL查询
    2024.7.91.在查询的时候,如果要select一个临时表再次用于查询,要给它起别名2.各个关键字正确的执行顺序如下先找到要查询表格或连接要查询的表格,因此FROM才是第一步;接下来是进行条件筛选,所以是WHERE紧随其后;然后如果遇到表格有分组的需要,则需要先GROUPBY;分组时如果也......
  • MySQL-18.主从复制
    C-18.主从复制1.主从复制概述1.1如何提升数据库并发能力在实际工作中,我们常常将Redis作为缓存与MySQL配合来使用,当有请求的时候,首先会从缓存中进行查找,如果存在就直接取出。如果不存在再方法数据库,这样就提升了读取的效率,也减少了对后端数据库的访问压力。Redis的缓存架构是......
  • MySQL库表操作练习
    库表信息CREATETABLEgrade(idINTNOTNULL,sexCHAR(1),firstnameVARCHAR(20)NOTNULL,lastnameVARCHAR(20)NOTNULL,englishFLOAT,mathFLOAT,chineseFLOAT);INSERTINTOgradeVALUES(1,'m','John',......
  • mysql5.7 干净卸载-配置安装-远程访问-数据无损移植
    mysql5.7干净卸载-配置安装-数据无损移植 一:干净卸载步骤一:关闭MySQL服务在卸载MySQL之前,确保MySQL服务已停止。可以通过以下步骤停止MySQL服务:打开命令提示符(CMD)。运行以下命令:netstopmysql步骤二:卸载MySQL程序在卸载MySQL之前,需要先卸载MySQL程序。可以通过以下步骤......
  • JDBC连接MySql教程
    一.JDBC的概念JDBC全称JavaDatabaseConnectivity,是给Java开发的人员提供的一套进行数据库操作的工具,它提供了一种标准化的方式来连接到不同数据库的驱动程序,并且可以保证安全、跨平台和高效的数据访问。二.JDBC连接MySql的步骤(一)驱动准备在连接之前必要的就是对应版本......