11.2.2 DATE,DATETIME,和 TIMESTAMP 类型
发布日期:2021-05-08 00:27:36 浏览次数:20 分类:精选文章

本文共 1603 字,大约阅读时间需要 5 分钟。

MySQL 提供了三种日期和时间相关的数据类型:DATE、DATETIME 和 TIMESTAMP。它们在功能上有相似之处,但也有显著的区别。理解这些区别对于数据库设计和应用开发至关重要。本文将详细介绍这三种类型的特点及其使用场景。

DATE 类型

DATE 类型用于存储日期而不包含时间部分。MySQL 以 'YYYY-MM-DD' 格式显示 DATE 值,支持范围为 '1000-01-01' 到 '9999-12-31'。这种类型适用于需要记录日期但不需要时间精度的场景。

DATETIME 类型

DATETIME 类型与 DATE 类型相似,但还包括时间部分。MySQL 以 'YYYY-MM-DD hh:mm:ss' 格式显示 DATETIME 值,支持范围为 '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59'。它比 DATE 类型更灵活,适用于需要记录完整日期和时间的应用。

TIMESTAMP 类型

TIMESTAMP 类型与 DATETIME 类型类似,但具有不同的特点:

  • 时间范围:支持范围为 UTC '1970-01-01 00:00:01' 到 UTC '2038-01-19 03:14:07'。
  • 时区转换:MySQL 将 TIMESTAMP 值从当前时区转换为 UTC 存储,并在检索时从 UTC 转换回当前时区。这与 DATETIME 不同,后者不进行时区转换。
  • 精度:支持小数秒,精度最高可达微秒(6位)。
  • 小数秒的处理

    无论是 DATETIME 还是 TIMESTAMP,如果插入值包含小数部分,MySQL 会存储这些小数秒。例如,'YYYY-MM-DD hh:mm:ss.fraction' 格式的值会被正确解析。DATETIME 的范围是 '1000-01-01 00:00:00.000000' 到 '9999-12-31 23:59:59.999999',而 TIMESTAMP 的范围是 '1970-01-01 00:00:01.000000' 到 '2038-01-19 03:14:07.999999'。

    时区和偏移量

    从 MySQL 8.0.19 开始,允许在插入 TIMESTAMP 和 DATETIME 值时指定时区偏移量。偏移量会附加在日期和时间文本中,格式为 '+hh:mm' 或 '-hh:mm'。需要注意的是:

    • 小时值必须为 00 到 23 之间。
    • '-00:00' 会被拒绝。
    • 不能使用 'EET' 或 'Asia/Shanghai' 等时区名称。
    • 插入的值必须包含有效的月、日、小时等信息。

    特殊情况

    无效的 DATE、DATETIME 或 TIMESTAMP 值会被转换为 '0000-00-00' 或 '0000-00-00 00:00:00',具体行为取决于 SQL 模式和 NO_ZERO_DATE 设置。

    MySQL 8.0.22 的新功能

    从 MySQL 8.0.22 开始,允许使用 CAST() 和 AT TIME ZONE 操作符将 TIMESTAMP 转换为 UTC DATETIME 值。例如:

    SELECT col, CAST(col AT TIME ZONE INTERVAL '+00:00' AS DATETIME) AS ut FROM ts ORDER BY id;

    注意事项

    • MySQL 不支持在日期或月部分包含 '00'。例如,'2004-04-31' 会被转换为 '0000-00-00'。
    • 两位数字的年份值会被解释为特定的世纪范围。例如,'69' 会被解释为 2069,而 '70' 会被解释为 1970。
    • 严格模式下,无效日期会生成错误,而禁用严格模式后会生成警告。

    理解这些要点可以帮助开发者在设计数据库时做出合适的类型选择,确保数据存储和查询的准确性。

    上一篇:11.2.3 TIME 类型
    下一篇:11.2.1 日期和时间数据类型语法

    发表评论

    最新留言

    第一次来,支持一个
    [***.219.124.196]2025年03月26日 03时39分06秒