MySQL的日期,用Datetime还是Timestamp?

MySQL 保存日期,用哪种数据类型合适?datetime?timestamp?还是 int? 日期算是我们在日常开发中经常用到的数据类型,一般来说一张表都有 createTime 和 updateTime 字段,MySQL 中针对日期也提供了很多种不同的数据类型,如:datetimetimestampint等等。甚至也有人直接将日期存为字符串的。那么到底该用哪种类型来保存日期呢?在这些类型中,首先应该排除掉的就是字符串了,很多新手小伙伴爱用字符串存储日期,但实际上这并不是一个很好的方案。使用字符串存储日期,第一个显而易见的问题就是无法使用 MySQL 中提供的日期函数,这会为很多查询带来不便。例如用 阅读详情

在 MySQL 中,DATETIME 和 TIMESTAMP 都用于存储日期和时间,它们之间有什么区别?我们该如何选择?这篇文章我们来聊一聊。

1. 两者区别

DATETIME 和 TIMESTAMP的关键区别,包括存储范围、时区处理、存储大小以及自动初始化和更新特性。

1.1 存储范围

DATETIME

  • 范围:1000-01-01 00:00:00 至 9999-12-31 23:59:59
  • 用途:适用于需要记录跨越多个世纪的日期时间值。

TIMESTAMP

  • 范围:1970-01-01 00:00:01 UTC 至 2038-01-19 03:14:07 UTC
  • 用途:适用于记录相对较近的日期时间,特别是与 Unix 时间戳相关的应用。

1.2 时区处理

DATETIME

  • 时区独立:存储和检索时不受服务器或客户端时区设置影响。即,无论服务器时区如何,DATETIME 字段存储的值始终保持一致。
  • 适用场景:适用于需要存储固定的日期和时间,不随时区变化而变化的数据,例如生日、纪念日等。

TIMESTAMP

  • 时区相关:根据服务器或客户端的时区设置,在存储前将输入的值转换为 UTC 时间,检索时再转换回当前时区。这使得 TIMESTAMP 字段的值会根据时区的不同而变化。
  • 适用场景:适用于需要跟踪事件发生的确切时刻,并考虑到不同时区的应用场景,例如日志记录、记录数据修改时间等。

1.3 存储大小

DATETIME

  • 存储空间:占用 5 字节(不包含可选的小数秒部分)。

TIMESTAMP

  • 存储空间:占用 4 字节(不包含可选的小数秒部分)。

1.4 自动初始化和更新

DATETIME

  • 默认行为:在早期版本的 MySQL 中,DATETIME 不支持自动初始化或自动更新 CURRENT_TIMESTAMP。从 MySQL 5.6.5 开始,可以为 DATETIME 字段设置默认值和自动更新值。

TIMESTAMP

  • 默认行为:在早期版本的 MySQL 中,TIMESTAMP 常用于自动记录行的创建和更新时间。即可以自动初始化为 CURRENT_TIMESTAMP,并在每次更新时自动更新为当前时间。
  • 灵活性:从 MySQL 5.6.5 开始,TIMESTAMP 与 DATETIME 在这方面的功能趋于一致,都可以使用默认值和自动更新。

1.5 默认值和零值

DATETIME

  • 默认值:在严格模式下,若未指定默认值,插入 NULL。在非严格模式下,可能默认为 '0000-00-00 00:00:00'。

TIMESTAMP

  • 默认值:如果未指定,通常默认值为 CURRENT_TIMESTAMP,尤其在早期 MySQL 版本中;可以通过表定义进行自定义。

2. 使用场景

DATETIME

  • 需要存储一个独立于时区的固定日期和时间。
  • 需要表示范围更广的日期时间,例如历史事件或未来的远期事件。

TIMESTAMP

  • 需要记录事件的确切发生时间,并且希望它能够根据时区自动转换。
  • 需要节省存储空间(尽管差异较小,根据具体应用场景决定)。

示例

CREATE TABLE example (
    event_id INT AUTO_INCREMENT PRIMARY KEY,
    event_datetime DATETIME DEFAULT '2025-01-01 00:00:00',
    event_timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

在上述示例中:

  • event_datetime 将始终存储 '2025-01-01 00:00:00',除非显式指定为其他值,无论服务器时区如何。
  • event_timestamp 将在插入行时自动设置为当前时间,并在每次更新行时自动更新为新的当前时间,基于服务器的时区设置。

3. 总结

本文,我们分析了 MySQL的DATETIME和TIMESTAMP时间类型,具体如何选择它们,应根据具体的应用需求和数据特性来决定。

  1. 日期范围限制:由于 TIMESTAMP 的范围较 DATETIME 更有限,选择时需确保数据不会超出 TIMESTAMP 的支持范围。
  2. 时区影响:如果应用需要跨时区一致性,DATETIME 可能更合适;若需要记录具体发生时间并考虑时区转换,TIMESTAMP 更为适用。
  3. 存储空间:虽然两者的存储空间差异不大,但在有大量数据时,TIMESTAMP 可能略占优势。

mysql中日期类型Date DateTime TimeStamp的区别 在实际应用的很多场景中,mysql的这两种日期类型都能够满足我们的需要,存储精度都为秒,但在某些情况下,会展现出他们各自的优劣。下面就来总结一下两种日期类型的区别。1.DATETIME的日期范围是1001——9999年,TIMESTAMP的时间范围是1970——2038年。2.DATETIME存储时间与时区无关,TIMESTAMP存储时间与时区有关,显示的值也依赖于时区。在mysql服务器,操作系... 阅读详情

相关推荐

Yolov5s/Yolov8s网络结构图

yolov8、yolov5网络结构图

Goodness2020的博客 9925

MySQL 日期格式 DATETIME 和 TIMESTAMP

存储日期的方式mysql中存储日期的格式datetimetimestampDatetime和Timestamp的比较数值型时间戳(INT)DATETIME vs TIMESTAMP vs INT,怎么选?

qq_53844452的博客 2098

光斑大小控制【ZEMAX操作数】

在使用Zemax优化光学系统时,对成像的聚焦光斑大小进行限制,即弥散斑的大小; 一、RSCE(质心RMS光斑半径):二、RSCH(光线RMS光斑半径):

yh的博客 7867

Mysql日期类型DATETIME和TIMESTAMP区别

在日常数据库设计中,几乎每张业务表都带有一个日期列,用于记录每条记录产生和变更的时间。比如用户表会有一个日期列记录用户注册的时间、用户最后登录的时间。又比如,电商行业中的订单表(核心业务表)会有一个订单产生的时间列,当支付时间超过订单产生的时间,这个订单可能会被系统自动取消。 日期类型虽然常见,但在表结构设计中也容易犯错,比如很多开发同学都倾向使用整型存储日期类型,同时也会忽略不同日期类型对于性能可能存在的潜在影响。所以你有必要认真看看这篇文章,举一反三,在自己的业务中做好日期类型的设计。 日期类型 MyS

一路的博客 4248

FactoryTool量产神器实战:5分钟搞定多块RK3568板卡并行烧录

本文详细介绍了使用瑞芯微FactoryTool对多块RK3568板卡进行高效并行烧录的实战指南。文章从硬件连接、驱动配置、软件操作到排错技巧,提供了一套完整的量产解决方案,重点阐述了如何利用该工具在5分钟内完成多设备固件烧录,并确保eMMC存储的写入稳定性与效率,大幅提升生产线吞吐量。

b0c1d2的博客 991

暗月项目七详解

本文围绕“暗月靶场项目七”展开,记录了一次从外网 Web 入口逐步深入内网并最终获取域控目标的完整实训过程。

Re_K123的博客 419

mysql的日期时间类型及精度问题/time、date、datetime、timestamp和year

二、 mysql中的日期时间类型 2.1、详细解释 2.2、占用字节 2.3、time类型 三、datetime和timestamp区别 3.1、相同点 3.2、不同点 四、mysql日期类型中的坑 4.1、 time、timestamp、datetime数据类型四舍五入 五、其他疑问问题 5.1、date类型可以存时分秒么?可以存储不存在的日期么?

weixin_49114503的博客 2万+

PhoenixSuit全志刷机实战:从驱动安装到固件烧录的完整避坑指南

本文提供全志芯片设备使用PhoenixSuit进行线刷的完整实战指南。详细介绍了从驱动安装、双公头USB线连接、强制刷机模式进入,到固件烧录全过程的核心步骤与常见错误排查。重点解析了如何避免驱动安装失败、正确触发刷机模式以及应对烧录卡顿等关键问题,帮助用户顺利完成刷机或救砖操作。

algae的博客 1691

MySQL 日期类型选择:TIMESTAMP 还是 DATETIME?

在 MySQL 中,选择TIMESTAMP还是DATETIME取决于你的具体需求。TIMESTAMP适合需要处理跨时区时间的数据,而DATETIME适合需要存储更广泛时间范围并且无关时区的数据。理解这两种类型的优缺点和使用场景,可以帮助你在设计数据库时作出更明智的决策。

My_wife_QBL的博客 2427

Matlab:常见涡旋光束仿真

代码: clc clear all close all %% 环形涡旋光束 N = 200; lambda = 632e-9; %波长为632nm k = 2*pi/lambda; %波数 w0 = 3; %束腰半径 x = linspace(-10,10,N); y = linspace(-10,10,N); [X,Y] = meshgrid(x,y); [t...

zzz997的博客 3万+

yolov8知识蒸馏代码详解:支持logit和feature-based蒸馏

特别地,在COCO数据集上对MAP中的RetinaNet检测器(resnet50主干)获得了3.4%的性能提升,在Cityscapes数据集上, 针对mIoU指标,PSPNET(resnet-18 backbone)获得5.81%的性能提升。大部分的KD方法都是通过algin学生网络和教师网络的归一化的feature map, 最小化feature map上的激活值的差异。MGD是一种真正通用的基于特征feature的知识蒸馏方法,它可以用于各种任务,包括图像分类,目标检测,语义分割和实例分割。

@bangbang的博客 7286

MySQL日期类型DATETIME和TIMESTAMP

MySQL5的日期类型有三种:DATETIME、DATE和TIMESTAMP,除了DATE用来表示一个不带时分秒的是日期,另外两个都带时分秒。TIMESTAMP还可以精确到毫秒。   其次还有个共性,就是他们的格式“不严格”,很自由,一般你认为对的格式都可以正确插入到数据库中。   这里主要解决带时分秒日期的一些常见问题。   一、IMESTAMP   1、TIMESTAMP列必须

THE DOOR IS CHANGING 1102

【AI智能体】Codex 开发聚合搜索应用项目实战操作详解

Codex 开发聚合搜索应用项目实战操作详解

congge 3096

MySQL日期和时间数据类型(DATE、TIME、 DATETIME、 TIMESTAMP和YEAR)

目录 日期和时间数据类型语法 Date DATETIME和DATETIME(fsp) TIMESTAMP和TIMESTAMP[(fsp)] TIME和TIME(fsp) YEAR和YEAR(4) 本文基于MySQL 5.7版本。 MySQL中表示时间值的日期和时间数据类型有以下五个: (1)DATE (2)TIME (3)DATETIME (4)TIMESTAMP (5)YEAR 日期和时间数据类型语法 MySQL允许对TIME、...

L 10万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

mysql中日期类型DATETIME和TIMESTAMP的区别

在实际应用的很多场景中,mysql的这两种日期类型都能够满足我们的需要,存储精度都为秒,但在某些情况下,会展现出他们各自的优劣。下面就来总结一下两种日期类型的区别。 1.DATETIME的日期范围是1001——9999年,TIMESTAMP的时间范围是1970——2038年。 2.DATETIME存储时间与时区无关,TIMESTAMP存储时间与时区有关,显示的值也依赖于时区。在mysql服务器

1万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

MySQL 日期数据类型 - date, datetime, timestamp区别及相互转换

1.介绍 数据库时间日期常见存储类型,取出三者后,到后端或者前端均是字符串类型【其实在数据表中存储也是字符类型,不过是有固定格式约束的字符罢了】, 也均可以使用int类型存储,使用代码二次转换【TBD】 2.应用场景 存储数据到数据表时,选定字段类型, 如何选取合适的时间类型是必要的,已经时间类型确定,需要转换为合适的字段类型也是在所难免。 如: 设计数据表时, 设...

"代码"的日常搬运 5万+

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

MySQL 的保存日期,用哪种数据类型合适?datetime?timestamp?还是 int?

日期算是我们在日常开发中经常用到的数据类型,一般来说一张表都有 createTime 和 updateTime 字段,MySQL 中针对日期也提供了很多种不同的数据类型,如: datetime timestamp int 等等。甚至也有人直接将日期存为字符串的。 那么到底该用哪种类型来保存日期呢? 1. 字符串 在这些类型中,首先应该排除掉的就是字符串了,很多新手小伙伴爱用字符串存储日期,但实际上这并不是一个很好的方案。 使用字符串存储日期,第一个显而易见的问题就是无.

weixin_68320784的博客 3736

mysql timstamp_DB_MySQL_日期类型讲解_DATETIME_DATE_TIMESTAMP

MySQL5的日期类型有三种:DATETIME、DATE和TIMESTAMP,除了DATE用来表示一个不带时分秒的是日期,另外两个都带时分秒。TIMESTAMP还可以精确到毫秒。其次还有个共性,就是他们的格式“不严格”,很自由,一般你认为对的格式都可以正确插入到数据库中。这里主要解决带时分秒日期的一些常见问题。一、IMESTAMP1、TIMESTAMP列必须有默认值,默认值可以为“0000-00-...

weixin_42537499的博客 282

mysql datetime,timestamp,date,time,year日期时间类型

1, DATETIME DATETIME 用于表示 年月日 时分秒,是 DATE 和 TIME 的组合,并且记录的年份(见上表)比较长久。如果实际应用中有这样的需求,就可以使用 DATETIME 类型。 2,TIMESTAMP *TIMESTAMP 用于表示 年月日 时分秒,但是记录的年份(见上表)比较短暂。 *TIMESTAMP 和时区相关,更能反映当前时间。当插入日期时,会先转换为本地时区后再...

weixin_40524659的博客 576

MySQL基础--04---日期时间类型与格式化datetime、timestamp

MySQL中的日期时间类型 MySQL中常用的几种时间类型有:date、datetime、time、year、timestamp 详细解释 datetime 时间日期型 格式是YYYY-mm-dd HH:ii:ss,表示的范围是从1000到9999。但是有零值,0000-00-00 00:00:00; date:日期 就是datetime中的date部分; time:时间(段) 指定的某个区间之间,从-时间到+时间(有负时间表示); timestamp:时间戳 并不是常规意义时间戳(如:14253685

时光里的博客 1万+

MySQL5日期类型DATETIME和TIMESTAMP相关问题详解

MySQL5的日期类型有三种:DATETIME、DATE和TIMESTAMP,除了DATE用来表示一个不带时分秒的是日期,另外两个都带时分秒。TIMESTAMP还可以精确到毫秒。   其次还有个共性,就是他们的格式“不严格”,很自由,一般你认为对的格式都可以正确插入到数据库中。   这里主要解决带时分秒日期的一些常见问题。   一、IMESTAMP   1、TIMESTAMP

xiaomin1991222的专栏 285

Mysql日期(DATE, TIME, DATETIME, TIMESTAMP)类型的比较

Mysql日期(DATE, TIME, DATETIME, TIMESTAMP)类型的比较 转载:https://blog.youkuaiyun.com/u013262534/article/details/82629290 最近发现自己一直以来经常用一种错误的方法在比较日期,例如一下语句,a字段是一个DATETIME类型的列: select a from t1 where DATEDIFF(...

stay hungry ! stay foolish! 870

mysql datetime的长度_mysql的日期存储字段比较int,datetime,timestamp区别

1、首先是我们分析datetime长度是8个字节,INT的长度是4个字节,存储空间上比datatime少。2、int存储索引的空间也比datetime少,排序效率高,查询速度比较快。3、方便计算,unix时间戳有点就是方便计算。总结了一下timestamp和datetime的区别:1、timestamp有范围限制1970~20372、timestamp支持defaultcurrent_tim...

weixin_36236774的博客 5541

mysql5.5多个日期字段_MySQL5日期类型DATETIME和TIMESTAMP相关问题详解

MySQL5日期类型DATETIME和TIMESTAMP相关问题详解MySQL5的日期类型有三种:DATETIME、DATE和TIMESTAMP,除了DATE用来表示一个不带时分秒的是日期,另外两个都带时分秒。TIMESTAMP还可以精确到毫秒。其次还有个共性,就是他们的格式“不严格”,很自由,一般你认为对的格式都可以正确插入到数据库中。这里主要解决带时分秒日期的一些常见问题。一、IMESTAMP...

weixin_29645033的博客 751

mysql日期比较timestamp_mysql数据类型datetime,date和timestamp比较

datetime 显示为'YYYY-MM-DD HH:MM:SS'格式,范围为'1000-01-01 00:00:00'到'9999-12-31 23:59:59'date 显示为'YYYY-MM-DD'格式,范围为'1001-01-01'到'9999-12-31'timestamp 范围从'1970-01-01 00:00:01'UTC 到'2038-01-09 03:14:07'U...

weixin_39863759的博客 1103
上一篇: MySQL 的JSON类型,违反第一范式吗?
下一篇: 5种常见的加密算法,建议掌握!
退休的汤姆
博客等级 码龄7年 1657粉丝 1051原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值