MySQL 中 DATE、DATETIME 和 TIMESTAMP 的区别

在 MySQL 中,DATE、DATETIME 和 TIMESTAMP 都是用于存储日期和时间的数据类型,但它们在格式、范围、存储大小、时区处理和功能上存在显著差异。以下将逐步对比这些区别,帮助您根据实际需求选择合适的数据类型。

1. 定义和基本用途
  • DATE:仅存储日期部分(年、月、日),不包括时间信息。适用于只需要记录日期的场景,如生日、事件日期。
  • DATETIME:存储日期和时间(年、月、日、时、分、秒)。适用于需要精确时间点的场景,如订单创建时间、日志记录。
  • TIMESTAMP:也存储日期和时间,但与时区相关。它基于 Unix 时间戳(从 ‘1970-01-01 00:00:00’ UTC 开始的秒数),并自动进行时区转换。适用于需要自动更新或国际化处理的场景,如用户登录时间。
2. 格式和有效范围
  • DATE
    • 格式:YYYY-MM-DD。
    • 范围:‘1000-01-01’ 到 ‘9999-12-31’。
    • 示例:2023-10-05
  • DATETIME
    • 格式:YYYY-MM-DD HH:MM:SS。
    • 范围:‘1000-01-01 00:00:00’ 到 ‘9999-12-31 23:59:59’。
    • 示例:2023-10-05 14:30:00'
  • TIMESTAMP
    • 格式:YYYY-MM-DD HH:MM:SS,但在存储时转换为 UTC 时间。
    • 范围:‘1970-01-01 00:00:01’ UTC 到 ‘2038-01-19 03:14:07’ UTC(由于 4 字节存储限制,称为“2038 年问题”)。
    • 示例:2023-10-05 14:30:00'
3. 存储大小
  • DATE:占用 3 字节。
  • DATETIME:占用 8 字节(在 MySQL 5.6.4 及之后版本中占用5字节)。
  • TIMESTAMP:占用 4 字节。

存储大小影响性能和空间效率:TIMESTAMP 更紧凑,但范围较小;DATETIME 范围更大但占用更多空间;DATE 适用于纯日期场景。

4. 时区处理
  • DATEDATETIME:存储为字面值,不进行时区转换。插入和检索时值保持不变(例如,插入 ‘2023-10-05 14:30:00’ 会原样存储)。
  • TIMESTAMP:存储时转换为 UTC 时间,检索时根据 MySQL 服务器的时区设置或会话时区转换回本地时间。例如,如果服务器时区为 UTC+8,插入 ‘2023-10-05 14:30:00’ 会存储为 UTC 时间 ‘2023-10-05 06:30:00’,检索时再转换回 ‘2023-10-05 14:30:00’。
5. 自动更新功能
  • TIMESTAMP:支持自动更新特性。可以在表定义中设置 DEFAULT CURRENT_TIMESTAMPON UPDATE CURRENT_TIMESTAMP,使其在插入或更新时自动设置为当前时间(例如,用于记录最后修改时间)。
  • DATETIME:在 MySQL 5.6.5 及之后版本也支持自动更新(如 DEFAULT CURRENT_TIMESTAMP),但 TIMESTAMP 更常用且兼容性好。
  • DATE:不支持自动更新。
6. 使用场景建议
  • 使用 DATE 当:只关心日期,如员工入职日期、活动日期。
  • 使用 DATETIME 当:需要完整日期和时间,且范围较大(超过 2038 年)或不需要时区转换,如历史数据记录。
  • 使用 TIMESTAMP 当:需要自动更新时间、处理时区敏感数据或节省存储空间,如用户会话跟踪、国际化应用。
总结关键区别
特性DATEDATETIMETIMESTAMP
存储内容仅日期 (YYYY-MM-DD)日期和时间 (YYYY-MM-DD HH:MM:SS)日期和时间 (YYYY-MM-DD HH:MM:SS)
范围1000-01-01 到 9999-12-311000-01-01 00:00:00 到 9999-12-31 23:59:591970-01-01 00:00:01 UTC 到 2038-01-19 03:14:07 UTC
存储大小3 字节8 字节 (5字节)4 字节
时区处理无转换无转换存储为 UTC,检索时转换
自动更新不支持支持(5.6.5+)支持

在实际应用中,选择数据类型时需考虑数据范围、时区需求和存储效率。例如,对于用户注册时间,优先使用 TIMESTAMP 以利用自动更新;对于长期历史数据,DATETIME 更可靠。建议参考 MySQL
官方文档测试具体版本行为。

其他时间字段

  1. TIME

    • 存储内容:时间(时分秒)
    • 格式HH:MM:SS
    • 范围-838:59:59838:59:59(可表示时间间隔)
    • 示例14:30:45-02:30:00(表示负时间间隔)
  2. YEAR

    • 存储内容:年份
    • 格式YYYY(4 位)或 YY(2 位,已弃用)
    • 范围19012155
    • 示例2023
  3. 微秒支持(MySQL 5.6.4+)

    • 通过附加精度参数实现(如 DATETIME(3) 存储毫秒)
    • 格式:YYYY-MM-DD HH:MM:SS.ffffff
    • 示例:2023-10-05 14:30:45.123456

选择建议

  • 只需日期 → DATE
  • 需完整时间且不涉及时区 → DATETIME
  • 需自动时区转换或记录更新时间 → TIMESTAMP
  • 仅需时间或时间间隔 → TIME
  • 仅需年份 → YEAR

示例:

-- 创建包含三种类型的表
CREATE TABLE example (date_col DATE comment '创建日期',time_col TIME comment '时间',year_col YEAR comment '年份',datetime_col DATETIME DEFAULT CURRENT_TIMESTAMP comment '创建时间',timestamp_col TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '时间戳'
);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/88616.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/88616.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/88616.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

面试 — 预进行 — 面试前准备

好记忆不如烂笔头,能记下点东西,就记下点,有时间拿出来看看,也会发觉不一样的感受. 书接上回,虽然我已经阐述过一下,详见面试 — 预准备 — 面试前准备攻略,但是我还是想再说一次,毕…

“易问易视”——让数据分析像聊天一样简单

一、项目简介 “易问易视”通过自然语言理解和大语言模型技术,将用户的中文查询自动转化为数据处理指令,实现无代码的数据检索与图表生成。你只要在大屏上输入一句话,比如“2024年每月有多少人出境”,它就能自动看懂你要查的时间…

【入门级-基础知识与编程环境:9、使用图形界面新建、复制、删除、移动文件或目录】

在图形界面(GUI)中操作文件或目录(新建、复制、删除、移动)是最直观的方式,不同操作系统(Windows、macOS、Linux)的操作类似但略有差异。以下是详细步骤: Windows 系统 新建文件/目…

百度中年危机:一场艰难的突围战

自互联网萌芽阶段起,搜索引擎便在数字世界中扮演着“指南针”的角色,引领用户在海量信息洪流中精准定位所需内容。传统搜索引擎依托关键词匹配技术,构建起大规模的信息索引系统,这一模式曾助力百度等企业攀上行业高峰。 然而&…

Vue3解析Spring Boot ResponseEntity

在 Vue 3 中解析 Spring Boot 返回的 ResponseEntity 主要涉及处理 HTTP 响应。Spring Boot 的 ResponseEntity 通常包含状态码、响应头和响应体(JSON 数据为主)。以下是详细步骤和代码示例: 解决方案步骤: 发送 HTTP 请求&#x…

深入掌握MyBatis:核心解析

一、MyBatis核心架构解析 1. 什么是MyBatis? MyBatis是一款半自动ORM框架,它通过XML或注解将SQL与Java对象映射,提供比Hibernate更灵活的SQL控制能力,同时消除了传统JDBC的样板代码。 2. 核心组件关系图 3. 核心组件职责 组件…

通达信 超级趋势强悍 幅图指标公式

指标用法说明 核心逻辑 该指标通过结合价格趋势、波动率和支撑阻力分析来识别潜在的买入机会和趋势转折点。 主要组成部分 趋势判断: 使用19日和7日EMA的交叉判断趋势方向 股道_Q_3:19日EMA上穿7日EMA(看涨信号) 股道_Q_4:7日EMA上穿19日EMA(看跌信号) 支撑阻力线: …

knowledge-vue2项目(Electron)打包为PC桌面应用程序

1.使用nvm管理node版本 不同的项目开发需要的node版本环境不一样,所以需要使用nvm进行版本管理。 关键命令: (1)检查nvm版本号是否安装成功 nvm -v (2)检查所有node版本号 nvm ls (3)安装指定node版…

k8s集群1.18.20更换节点ip地址段需求操作

前期已经部署好一套k8s集群1.18.20版本,1个master,2个node节点,使用节点地址段为192.168.66.0/24,现在因测试任务需要临时调整到192.168.40.0/24,以下记录一下相关操作步骤,请供参考学习。 一、环境准备 …

1-BaoStock股票数据下载

一、程序功能 程序基于 baostock 接口实现 A 股股票数据的获取与存储,主要功能包括股票列表更新、数据下载与处理。程序通过三个核心函数协同工作: update_stk_list(dateNone):获取指定日期的 A 股股票列表,默认使用当日。自动处…

【C/C++】无锁队列实现与内存回收机制:Hazard Pointer 深度解析

无锁队列实现与内存回收机制:Hazard Pointer 深度解析 在并发系统中,为了提升性能和避免锁竞争,我们常常追求 lock-free 数据结构。但当你实现完一个无锁队列后,会发现一个严重问题: 内存什么时候释放?怎样…

Scrapy进阶封装(第三阶段:多管道封装,多文件存储)

1.yield返回数据的原理? 为什么要用yield返回数据给管道? 遍历这个函数的返回值的时候,挨个把数据读到内存,不会造成内存的瞬间占用过高,Python3中的range和python2中的xrange同理。scrapy是异步爬取,所以通过yield…

证照大师 MAX 4.0安装与基础功能体验(附流程演示)

软件介绍 证照大师 MAX 4.0是一款功能强大的证件照制作软件,专为满足用户不同场景下的证件照需求而设计。它整合了专业的照片处理技术和智能化的操作系统,提供了自动抠图、尺寸调整、美颜处理、批量处理以及格式转换等多种功能。该软件用户界面简洁明快…

RK3568-适配mipi屏幕触摸和显示

1.1 适配mipi屏幕触摸 gt9xx_lvds: gt9xx-lvds5d {compatible "goodix,gt9xx";reg <0x5d>;pinctrl-names "default";pinctrl-0 <&touch_gpio>;touch-gpio <&gpio1 RK_PA4 IRQ_TYPE_LEVEL_LOW>;reset-gpio <&gpio1…

ICME 2025音频编码器能力挑战赛Workshop即将举办!

IEEE International Conference on Multimedia and Expo 2025&#xff08;ICME 2025&#xff09; 将于 6月30日至7月4日在法国南特举行。作为全球多媒体领域的顶级会议之一&#xff0c;ICME 2025 汇聚全球顶尖学者与产业专家&#xff0c;聚焦人工智能驱动的多媒体技术&#xff…

物奇微WQ5007A上手指南

一、获取SDK 需要与物奇微电子股份有限公司签订NDA协议才会提供SDK。 二、搭建开发环境 SDK里包含了编译工具、开发文档、源码。在windows系统下搭建开发环境&#xff1a; 1、安装交叉编译工具 将\wuqi_sdk\tools\riscv64-unknown-elf-gcc-10.2.0-windows.zip文件解压到任…

[论文阅读] 人工智能 + 软件工程 | LLM在单元测试中的应用:系统性综述与未来展望

LLM在单元测试中的应用&#xff1a;系统性综述与未来展望 论文信息 arXiv:2506.15227 Large Language Models for Unit Testing: A Systematic Literature Review Quanjun Zhang, Chunrong Fang, Siqi Gu, Ye Shang, Zhenyu Chen, Liang Xiao Subjects: Software Engineering …

数据重叠对CLIP零样本能力影响CLIP论文图17笔记

这两张图表&#xff08;图17左、右图&#xff09;是CLIP论文中验证“数据重叠是否影响CLIP零样本能力”的关键证据&#xff0c;核心是通过**“数据重叠分析”排除CLIP“作弊”嫌疑**&#xff08;即CLIP的高零样本准确率是否因为“见过测试集图像”&#xff09;。下面用“先看懂…

996引擎-假人系统

996引擎-假人系统 lua 假人问题添加假人名字列表打开M2设置假人参考资料 lua 假人问题 添加假人名字列表 假人名字列表 Mir200\Envir\DummyNameList.txt 打开M2设置假人 【选项】>【假人设置】 参考资料 假人系统

Rk3568驱动开发_Key驱动_13

设备树配置 key{compatible "alientek,key";pinctrl-0 <&key_gpio>;pinctrl-names "alientek,key";key-gpio <&gpio3 RK_PC5 GPIO_ACTIVE_HIGH>;status "okay";};配置信息方便后面直接引用&#xff1a; // Narnat 2025…