MySQL中的DATETIME 和 TIMESTAMP典型用法及关键区别

 更新时间:2025年08月25日 15:07:28   作者:dj_master  
在MySQL里,DATETIME和TIMESTAMP虽都用于存储日期时间数据,但在存储范围、时区处理、存储空间、默认行为等方面差异显著,下面通过本文给大家介绍MySQL中的DATETIME 和 TIMESTAMP典型用法及关键区别,感兴趣的朋友一起看看吧

在 MySQL 里,DATETIMETIMESTAMP 虽都用于存储日期时间数据,但在存储范围、时区处理、存储空间、默认行为等方面差异显著,详细对比分析如下:

一、存储范围

类型取值范围限制原因适用场景
DATETIME1000-01-01 00:00:00.0000009999-12-31 23:59:59.999999无特殊限制,覆盖极广时间范围需记录历史久远或未来远期时间(如古籍文献时间、项目长期规划时间 )
TIMESTAMP1970-01-01 00:00:01.000000 UTC 到 2038-01-19 03:14:07.999999 UTC基于 Unix 时间戳(32 位整数存秒数 ),受整数范围限制记录系统事件(如创建/修改时间 ),但需注意 2038 年“溢出”问题

二、时区处理

类型时区相关性存储与查询逻辑示例(当前时区 +08:00 ,插入 2025-06-20 14:18:00
DATETIME与时区无关,原样存储插入时存输入值,查询时直接返回,不受 MySQL 时区设置影响2025-06-20 14:18:00 ,查出来还是 2025-06-20 14:18:00
TIMESTAMP与时区相关,基于 UTC 转换插入时,MySQL 会将当前时区时间转为 UTC 存储;查询时,再转回当前会话时区显示插入时,+08:00 时间会转成 UTC 时间 2025-06-20 06:18:00 存储;查询时,再转回 +08:00 显示 2025-06-20 14:18:00

三、存储空间

类型基础存储大小(无小数秒)小数秒存储(如 .nnnnnn说明(MySQL 版本差异 )
DATETIME5 字节(MySQL 5.6.4+ )小数部分占 0 - 3 字节(取决于精度,如 .000001 占 3 字节 )5.6.4 前占 8 字节,之后优化为 5 字节 + 小数部分
TIMESTAMP4 字节小数部分占 0 - 3 字节始终基于 Unix 时间戳的存储优化,空间占用更小

四、默认值与自动更新行为

类型默认值规则自动更新支持示例(表设计 )
DATETIME默认不自动赋值,若未指定 DEFAULT ,插入后为 NULL需手动设置(如 DEFAULT CURRENT_TIMESTAMPON UPDATE CURRENT_TIMESTAMPsql<br>-- 需手动指定默认值才会自动填充<br>ALTER TABLE t ADD COLUMN dt DATETIME DEFAULT CURRENT_TIMESTAMP;<br>
TIMESTAMP未显式赋值时,默认填当前时间戳CURRENT_TIMESTAMP支持自动初始化(DEFAULT CURRENT_TIMESTAMP )和更新(ON UPDATE CURRENT_TIMESTAMPsql<br>-- 插入时自动填当前时间,更新行时自动更新时间<br>ALTER TABLE t ADD COLUMN ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;<br>

五、应用场景与典型用法

  • DATETIME 适用场景
    • 需记录与时区无关的精确时间(如事件发生的固定时间点,不管服务器时区如何,时间都不变 )。
    • 需存储历史久远或未来远期时间(如考古数据的时间记录、项目截止到 9999 年的任务 )。
  • 示例:
-- 记录文物出土时间,无论数据库时区如何,时间固定
CREATE TABLE relics (
    id INT PRIMARY KEY,
    unearthed_time DATETIME -- 存如 `1000-01-01 12:00:00`
);
  • TIMESTAMP 适用场景
    • 需跨时区自动转换的场景(如全球化应用,不同时区用户看到的时间自动适配本地时区 )。
    • 需自动记录创建/修改时间(如 create_time 自动填当前时间,update_time 更新时自动修改 )。
  • 示例:
-- 自动记录创建和修改时间,跨时区访问时自动转换
CREATE TABLE users (
    id INT PRIMARY KEY,
    create_ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- 插入时自动填当前时间
    update_ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP -- 更新时自动更新
);

六、关键区别总结(表格版)

特性DATETIMETIMESTAMP
存储范围极广(1000-01-019999-12-31有限(1970-01-01 UTC 到 2038-01-19 UTC )
时区处理与时区无关,原样存储与 UTC 关联,插入/查询时自动时区转换
存储空间5 字节(5.6.4+ ,无小数秒 )4 字节(无小数秒 )
默认值行为需手动设置默认值,否则为 NULL未赋值时默认填当前时间戳
自动更新需手动开启(ON UPDATE支持自动初始化和更新(常用作修改时间字段 )
典型场景固定时间点记录(如合同签订时间 )系统事件时间(如创建/修改时间 )、跨时区应用

实际使用时,若需处理跨时区业务或自动记录修改时间,选 TIMESTAMP;若需存远期时间、固定时间点且与时区无关,选 DATETIME。需注意 TIMESTAMP 的 2038 年限制,长期业务需提前规划替代方案(如迁移到 DATETIME 或用大数据时间类型 )。

到此这篇关于在 MySQL 里,DATETIME 和 TIMESTAMP的文章就介绍到这了,更多相关mysql datetime和timestamp内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Linux centos7环境下MySQL安装教程

    Linux centos7环境下MySQL安装教程

    这篇文章主要为大家详细介绍了Linux centos7环境下MySQL安装教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • mysql中索引与FROM_UNIXTIME的问题

    mysql中索引与FROM_UNIXTIME的问题

    这篇文章主要介绍了mysql中索引与FROM_UNIXTIME的问题的相关资料,需要的朋友可以参考下
    2017-05-05
  • MySQL实现类似Oracle序列的方案

    MySQL实现类似Oracle序列的方案

    今天小编就为大家分享一篇关于MySQL实现类似Oracle序列的方案,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • MySQL 中行转列的方法

    MySQL 中行转列的方法

    这篇文章主要介绍了MySQL 中行转列的方法,帮助大家更好的理解和学习MySQL的使用,感兴趣的朋友可以了解下
    2020-12-12
  • MySQL复制之GTID复制的具体使用

    MySQL复制之GTID复制的具体使用

    从MySQL 5.6.5开始新增了一种基于GTID的复制方式,本文主要介绍了MySQL复制之GTID复制的具体使用,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • MySql修改密码后phpMyAdmin无法登陆的解决方法

    MySql修改密码后phpMyAdmin无法登陆的解决方法

    这篇文章主要为大家详细介绍了MySql修改密码后PhpMyAdmin无法登陆的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • Mysql保持现有内容在后面增加内容的sql语句

    Mysql保持现有内容在后面增加内容的sql语句

    这篇文章主要介绍了Mysql保持现有内容在后面增加内容的sql语句,需要的朋友可以参考下
    2017-05-05
  • 使用JDBC从数据库中查询数据的方法

    使用JDBC从数据库中查询数据的方法

    下面小编就为大家带来一篇使用JDBC从数据库中查询数据的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-08-08
  • jdbc调用mysql存储过程实现代码

    jdbc调用mysql存储过程实现代码

    接下来将介绍下mysql存储过程的创建及调用,调用时涉及到jdbc的知识,不熟悉的朋友还要温习下jdbc哦,话不多说看代码,希望可以帮助到你
    2013-03-03
  • Mysql删除重复数据通用SQL的两种方法

    Mysql删除重复数据通用SQL的两种方法

    本文主要介绍了Mysql删除重复数据通用SQL的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-08-08

最新评论