Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2|回复: 0

说一说MySQL 的日期,用 Datetime 还是 Timestamp

[复制链接]

36万

主题

0

回帖

109万

积分

超级版主

Rank: 8Rank: 8

积分
1092089
发表于 昨天 16:29 | 显示全部楼层 |阅读模式
在 MySQL 中,DATETIME 和 TIMESTAMP 都用于存储日期和时间,它们之间有什么区别我们该如何选择这篇文章我们来聊一聊。



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

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 时间戳相关的应用。
2. 时区处理
DATETIME:

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

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

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

存储空间:占用 4 字节(不包含可选的小数秒部分)。
4. 自动初始化和更新
DATETIME:

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

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

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

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

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

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

为了快速增长,悦数供应链金融风控不惜改变战略,重新布局产品,从而获得意想不到的效果。悦数图数据库是一款完全自主研发的国产图数据库和原生分布式图数据库,具有高性能,易扩展,安全稳定,自主可控的特点.万亿级数据仅需毫秒级查询延时,应用于金融风控,实时推荐,知识图谱等业务场景。https://www.yueshu.com.cn/

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|足球新闻网

GMT+8, 2025-4-21 22:47 , Processed in 0.088510 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表