11.2.2 DATE,DATETIME 和 TIMESTAMP 类型

DATEDATETIMETIMESTAMP类型是相关的。本节描述了它们的 Feature,它们如何相似以及如何不同。 MySQL 可以识别第 9.1.3 节“日期和时间 Literals”中描述的几种格式的DATEDATETIMETIMESTAMP值。对于DATEDATETIME范围描述,“受支持”table 示尽管较早的值可能有效,但不能保证。

DATE类型用于具有日期部分但没有时间部分的值。 MySQL 检索并以'YYYY-MM-DD'格式显示DATE值。支持的范围是'1000-01-01''9999-12-31'

DATETIME类型用于包含日期和时间部分的值。 MySQL 检索并以'YYYY-MM-DD hh:mm:ss'格式显示DATETIME值。支持的范围是'1000-01-01 00:00:00''9999-12-31 23:59:59'

TIMESTAMP数据类型用于包含日期和时间部分的值。 TIMESTAMP的范围是'1970-01-01 00:00:01' UTC 到'2038-01-19 03:14:07' UTC。

DATETIMETIMESTAMP值可以包含尾随的小数秒部分,精度最高为微秒(6 位数)。特别是,存储在DATETIMETIMESTAMP列中的值中的任何小数部分都将被存储而不是被丢弃。包括小数部分,这些值的格式为'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 中小数秒支持的信息,请参见第 11.2.7 节“时间值的分数秒”

TIMESTAMPDATETIME数据类型提供自动初始化并更新到当前日期和时间。有关更多信息,请参见第 11.2.6 节“ TIMESTAMP 和 DATETIME 的自动初始化和更新”

MySQL 将TIMESTAMP值从当前时区转换为 UTC 进行存储,然后从 UTC 转换回当前时区进行检索。 (对于其他类型,例如DATETIME,不会发生这种情况.)默认情况下,每个连接的当前时区是服务器的时间。可以在每个连接的基础上设置时区。只要时区设置保持不变,您将获得与存储相同的值。如果存储TIMESTAMP值,然后更改时区并检索该值,则检索到的值与您存储的值不同。发生这种情况是因为没有在两个方向上使用相同的时区进行转换。当前时区可用作time_zone系统变量的值。有关更多信息,请参见第 5.1.13 节“ MySQL 服务器时区支持”

如果 SQL 模式允许此转换,则无效的DATEDATETIMETIMESTAMP值将转换为适当类型('0000-00-00''0000-00-00 00:00:00')的“零”值。精确的行为取决于是否启用了严格 SQL 模式和NO_ZERO_DATE SQL 模式中的哪一个;参见第 5.1.10 节“服务器 SQL 模式”

注意 MySQL 中日期值解释的某些属性:

在日期和时间部分与小数秒部分之间唯一识别的分隔符是小数点。

另请参见第 11.2.9 节“日期中的 2 位数字”

Note

MySQL 服务器可以在启用MAXDB SQL 模式的情况下运行。在这种情况下,TIMESTAMPDATETIME相同。如果在创建 table 时启用了此模式,则TIMESTAMP列将被创建为DATETIME列。结果,此类列使用DATETIME显示格式,具有相同的值范围,并且不会自动初始化或更新为当前日期和时间。参见第 5.1.10 节“服务器 SQL 模式”

Note

从 MySQL 5.7.22 开始,不推荐使用MAXDB。它将在将来的 MySQL 版本中删除。

首页