在MySQL中,DATETIMETIMESTAMP都是用于存储日期和时间的类型,但它们有一些关键的区别:

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,用于存储不同事件的发生时间,我们在表中使用DATETIMETIMESTAMP字段来分别存储事件的发生时间。

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());
  1. event_datetime:存储了一个固定的日期和时间'2024-12-15 12:00:00',不管系统的时区是什么,存储的值始终是这个时间。
  2. event_timestampNOW()返回当前的时间戳,并且会根据系统时区进行调整。如果我们在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:0012:00:00 - 8小时)。

总结

  • DATETIME:它存储的是你输入的实际时间,独立于时区,不会做任何转换。
  • TIMESTAMP:它存储的是UTC时间,并且在插入和查询时根据当前时区进行转换。在这个例子中,event_timestamp保存的时间会根据时区自动转换。

MySQL 中 DATETIME 和 TIMESTAMP 类型的区别是什么?的更多相关文章

  1. MySQL 中 datetime 和 timestamp 的区别与选择

    MySQL 中常用的两种时间储存类型分别是datetime和 timestamp.如何在它们之间选择是建表时必要的考虑.下面就谈谈他们的区别和怎么选择. 1 区别 1.1 占用空间 类型 占据字节 表 ...

  2. mysql中datetime与timestamp的比较

    相同 显示 TIMESTAMP列的显示格式与DATETIME列相同.换句话说,显示宽度固定在19字符,并且格式为YYYY-MM-DD HH:MM:SS. 不同 范围 datetime 以'YYYY-M ...

  3. MySQL中datetime和timestamp的区别及使用

    MySQL中有关TIMESTAMP和DATETIME的总结 转载自iVictor,原文链接:http://www.cnblogs.com/ivictor/p/5028368.html 一.MySQL中 ...

  4. mysql中datetime和timestamp的区别

    原文地址:http://database.51cto.com/art/200905/124240.htm 相同 显示 TIMESTAMP列的显示格式与DATETIME列相同.换句话说,显示宽度固定在1 ...

  5. mysql 中 datetime和 timestamp的区别

    DATETIME日期和时间的组合.支持的范围是'1000-01-01 00:00:00'到'9999-12-31 23:59:59'.MySQL以'YYYY-MM-DD HH:MM:SS'格式显示DA ...

  6. Mysql中datetime和timestamp区别

    DATETIME日期和时间的组合.支持的范围是'1000-01-01 00:00:00'到'9999-12-31 23:59:59'.MySQL以'YYYY-MM-DD HH:MM:SS'格式显示DA ...

  7. MySQL 中常见的时间类型有三种 DATE, DATETIME 和 TIMESTAMP

    MySQL 中常见的时间类型有三种 DATE, DATETIME 和 TIMESTAMP,其中 DATE 类型用于表示日期,但是不会包含时间,格式为 YYYY-MM-DD,而 DATETIME 和 T ...

  8. 解决python写入mysql中datetime类型遇到的问题

    解决python写入mysql中datetime类型遇到的问题 刚开始使用python,还不太熟练,遇到一个datetime数据类型的问题: 在mysql数据库中,有一个datetime类型的字段用于 ...

  9. MySQL中日期和时间类型

    1 日期类型 MySql中关于日期的类型有Date/Datetime/Timestamp三种类型. 日期赋值时,允许"不严格"语法:任何标点符都可以用做日期部分或时间部分之间的间割 ...

  10. MySQL问题记录——定义timestamp类型的数据

    MySQL问题记录——定义timestamp类型的数据 摘要:本文主要记录了在使用MySQL的过程中定义timestamp类型数据时遇到的问题以及解决方案. 问题重现 在Windows环境下安装MyS ...

随机推荐

  1. docker中创建容器时文件挂载和端口映射命令与首次登录官方mysql的参数

    docker run -itd --name nginx-08 -v /local_data2:/data/nginx/html -p 12000:80  nginx:1.18.0 docker ru ...

  2. Sdcb Chats 技术博客:数据库 ID 选型的曲折之路 - 从 Guid 到自增 ID,再到 Guid

    Sdcb Chats 技术博客:数据库 ID 选型的曲折之路 - 从 Guid 到自增 ID,再到 Guid 在软件开发中,数据库主键的选择,Guid 还是自增整数 ID,一直是一个备受开发者关注和讨 ...

  3. C/C++ 以及 Rust 中的 getch() 实现

    getch 是一个在 C 语言编程中常用的函数,用于从键盘读取一个字符,但不回显到屏幕上. 在 Windows 环境下,getch 实现通常包含在 <conio.h> 头文件中.需要注意的 ...

  4. 鸿蒙开发 - 支持导出,跨文件使用的自定义样式 AttributeModifier

    我们在自定义组件的时候,无论是用 @Styles 还是 @Extend,都很难真正做到独立的封装样式,因为这两者都不支持导出,不可以跨文件调用 这篇文章主要介绍一个接口 AttributeModifi ...

  5. 小程序开发实战案例五 | 小程序如何嵌入H5页面

    在接入小程序过程中会遇到需要将 H5 页面集成到小程序中情况,今天我们就来聊一聊怎么把 H5 页面塞到小程序中. 本篇文章将会从下面这几个方面来介绍: 小程序承载页面的前期准备 小程序如何承载 H5 ...

  6. 你还不会使用Pycham Remote development 打开远程主机工作目录吗?这篇文章帮你解决!

    前言 必备: 本地开发机与远程主机都要安装Pycharm专业版!!! 废话不多说直接开始!! 1.打开pycharm 2.依次点击File.Remote Development 3.依次点击SSH.N ...

  7. C语言的头文件包含,竟存在这么多知识点!

    文章来自:https://zhuanlan.zhihu.com/p/472808057 相关文章连接:头文件包含是可以嵌套的_[C语言]- 预处理指令3 - 文件包含! 很多事不深入以为自己懂了,但真 ...

  8. .NET周刊【2月第3期 2025-02-16】

    国内文章 我们是如何解决abp身上的几个痛点 https://www.cnblogs.com/jackyfei/p/18709265 张飞洪分享了abp框架在.net社区的使用经验,认为其在模块化.D ...

  9. Flink - [04] 窗口(Windows)

    题记部分 一.Flink中的窗口是什么 (1)一般真实的流都是无界的,怎样处理无界的数据? (2)可以把无限的数据流进行切分,得到有限的数据集进行处理 -- 也就是得到有界流 (3)窗口(Window ...

  10. EAR_v3 《浮声三》 智能化图书管理系统

    EAR_v3 <浮声三> 搭建于 Actix_Web 框架下的智能化图书管理系统 本项目的前身是 <Rusty_Borders 危墙> 的 在线控制系统 部分,经过大量开发工作 ...