MySQL 中 DATETIME 和 TIMESTAMP 类型的区别是什么?
在MySQL中,DATETIME和TIMESTAMP都是用于存储日期和时间的类型,但它们有一些关键的区别:
1. 存储方式和范围
DATETIME:
- 存储的日期和时间值是以“年-月-日 时:分:秒”的格式表示。
- 存储格式:
DATETIME存储的是固定的日期和时间信息,不受时区的影响。 - 范围:
DATETIME的值范围为'1000-01-01 00:00:00'到'9999-12-31 23:59:59'。 - 存储大小:占用 8 字节的存储空间。
TIMESTAMP:
- 存储的日期和时间值也以“年-月-日 时:分:秒”的格式表示,但它是基于UTC(协调世界时)存储的,并会根据时区的设置进行自动转换。
- 存储格式:
TIMESTAMP存储的是自1970年1月1日以来的秒数(UNIX时间戳),并且根据系统时区设置自动转换为相应的本地时间。 - 范围:
TIMESTAMP的值范围为'1970-01-01 00:00:01' UTC到'2038-01-19 03:14:07' UTC。 - 存储大小:占用 4 字节的存储空间。
2. 时区的影响
- DATETIME:不受时区影响,存储的值就是你插入的值,不进行时区转换。
- TIMESTAMP:受时区影响,存储的是UTC时间,但在插入和查询时,MySQL会自动将其转换为当前时区的时间。
3. 自动更新
- DATETIME:通常不会自动更新,除非通过触发器或其他逻辑进行更新。
- TIMESTAMP:可以设置为自动更新,例如,在插入或更新时自动记录当前时间。通常用于记录“创建时间”和“更新时间”。
4. 应用场景
- DATETIME:适用于需要存储固定的日期和时间值的场景,例如,事件的发生时间,不需要考虑时区转换的情况。
- TIMESTAMP:适用于需要记录时间戳并自动处理时区转换的场景,例如,日志记录、记录最后更新时间等。
5. 实际例子
假设我们有一个数据库表events,用于存储不同事件的发生时间,我们在表中使用DATETIME和TIMESTAMP字段来分别存储事件的发生时间。
CREATE TABLE events (
event_id INT AUTO_INCREMENT PRIMARY KEY,
event_name VARCHAR(100),
event_datetime DATETIME,
event_timestamp TIMESTAMP
);
插入数据
假设当前的系统时区是UTC+8(即北京时间)。
INSERT INTO events (event_name, event_datetime, event_timestamp)
VALUES
('Event 1', '2024-12-15 12:00:00', NOW()),
('Event 2', '2024-12-15 15:00:00', NOW());
- event_datetime:存储了一个固定的日期和时间
'2024-12-15 12:00:00',不管系统的时区是什么,存储的值始终是这个时间。 - event_timestamp:
NOW()返回当前的时间戳,并且会根据系统时区进行调整。如果我们在UTC+8时区执行插入操作,那么存储的event_timestamp值会是当前时间的UTC时间。
查询数据
假设我们现在查询这些数据:
SELECT event_id, event_name, event_datetime, event_timestamp FROM events;
结果
+----------+------------+---------------------+---------------------+
| event_id | event_name | event_datetime | event_timestamp |
+----------+------------+---------------------+---------------------+
| 1 | Event 1 | 2024-12-15 12:00:00 | 2024-12-15 04:00:00 |
| 2 | Event 2 | 2024-12-15 15:00:00 | 2024-12-15 07:00:00 |
+----------+------------+---------------------+---------------------+
- event_datetime字段保存的就是你插入的固定时间
'2024-12-15 12:00:00',不受时区影响。 - event_timestamp字段存储的是
UTC时间,即根据系统时区UTC+8调整后的时间,转换为2024-12-15 04:00:00(12:00:00 - 8小时)。
总结
- DATETIME:它存储的是你输入的实际时间,独立于时区,不会做任何转换。
- TIMESTAMP:它存储的是UTC时间,并且在插入和查询时根据当前时区进行转换。在这个例子中,
event_timestamp保存的时间会根据时区自动转换。
MySQL 中 DATETIME 和 TIMESTAMP 类型的区别是什么?的更多相关文章
- MySQL 中 datetime 和 timestamp 的区别与选择
MySQL 中常用的两种时间储存类型分别是datetime和 timestamp.如何在它们之间选择是建表时必要的考虑.下面就谈谈他们的区别和怎么选择. 1 区别 1.1 占用空间 类型 占据字节 表 ...
- mysql中datetime与timestamp的比较
相同 显示 TIMESTAMP列的显示格式与DATETIME列相同.换句话说,显示宽度固定在19字符,并且格式为YYYY-MM-DD HH:MM:SS. 不同 范围 datetime 以'YYYY-M ...
- MySQL中datetime和timestamp的区别及使用
MySQL中有关TIMESTAMP和DATETIME的总结 转载自iVictor,原文链接:http://www.cnblogs.com/ivictor/p/5028368.html 一.MySQL中 ...
- mysql中datetime和timestamp的区别
原文地址:http://database.51cto.com/art/200905/124240.htm 相同 显示 TIMESTAMP列的显示格式与DATETIME列相同.换句话说,显示宽度固定在1 ...
- mysql 中 datetime和 timestamp的区别
DATETIME日期和时间的组合.支持的范围是'1000-01-01 00:00:00'到'9999-12-31 23:59:59'.MySQL以'YYYY-MM-DD HH:MM:SS'格式显示DA ...
- Mysql中datetime和timestamp区别
DATETIME日期和时间的组合.支持的范围是'1000-01-01 00:00:00'到'9999-12-31 23:59:59'.MySQL以'YYYY-MM-DD HH:MM:SS'格式显示DA ...
- MySQL 中常见的时间类型有三种 DATE, DATETIME 和 TIMESTAMP
MySQL 中常见的时间类型有三种 DATE, DATETIME 和 TIMESTAMP,其中 DATE 类型用于表示日期,但是不会包含时间,格式为 YYYY-MM-DD,而 DATETIME 和 T ...
- 解决python写入mysql中datetime类型遇到的问题
解决python写入mysql中datetime类型遇到的问题 刚开始使用python,还不太熟练,遇到一个datetime数据类型的问题: 在mysql数据库中,有一个datetime类型的字段用于 ...
- MySQL中日期和时间类型
1 日期类型 MySql中关于日期的类型有Date/Datetime/Timestamp三种类型. 日期赋值时,允许"不严格"语法:任何标点符都可以用做日期部分或时间部分之间的间割 ...
- MySQL问题记录——定义timestamp类型的数据
MySQL问题记录——定义timestamp类型的数据 摘要:本文主要记录了在使用MySQL的过程中定义timestamp类型数据时遇到的问题以及解决方案. 问题重现 在Windows环境下安装MyS ...
随机推荐
- uniapp去修改vuex中state中的值
修改state中的值 修改state中的值,方法 (1) 在mutations中写修改state的api. (2)写好之后,直接store.commit("changeValue" ...
- xshell连接服务器无法用password登录,只能用public key的解决办法
xshell无法用password登录服务器,只能用public key的解决办法 只能用public key登录, 那么我们用阿里云后台的远程连接按钮进入服务器,进入后 修改/etc/ssh/ssh ...
- 使用CMD命令导出和导入IIS站点配置信息
1.导出导入某个站点 1.1.导出应用程序池和站点 1.1.1.导出某个应用程序池配置 具体导出命令如下所示: %windir%\system32\inetsrv\appcmd list apppoo ...
- AI-接入
前言 前面已经申请了模型,并且通过测试已经可以访问使用了,本篇的接入还是使用Ollama,前面我们已经可以在命令行终端能够进行交互了,现在将AI接入到代码中: 准备 作为一名Neter这里使用的是.n ...
- MinIO笔记
MinIO (网站 https://min.io/) 是开源的对象存储项目, 用Go实现, 支持Linux环境, 客户端支Java,Python,Javacript, Go等语言. 在分布式项目中, ...
- mangoDB操作指令
studio 3T 更新或插入字段: db.getCollection("data_379129").update({},{$set: {'connectedStatus':Num ...
- el-table 数据嵌套循环
<el-table :data="tableData" :show-header="false" style="width: ...
- SpringBoot整合富文本编辑器(UEditor)
UEditro是一款比较好用的富文本编辑器,所谓的富文本编辑器就是和服务器交互的数据不是普通的字符串文件,而是一些内容包含比较广的字符串,一般是指的html页面,目前比较好用的是百度的UEditor, ...
- Deepseek学习随笔(10)--- 本地AI神器Cherry Studio & Chatbox 保姆级教程(附网盘链接)
本篇介绍的 Cherry Studio 和 Chatbox 两款工具,只需简单几步,即可实现本地化部署AI能力,支持对话.编程.绘图等多场景应用.本文将手把手教你从零开始配置使用! 一.软件下载:两步 ...
- 2个月搞定计算机二级C语言——真题(11)解析
1. 前言 今天双 11,正好轮到讲第 11 篇,直接来个三 11. 那么本篇我们讲解2个月搞定计算机二级C语言--真题11 2. 程序填空题 2.1 题目要求 2.2 提供的代码 #include ...