的日期
,DATETIME
,时间戳
类型是相关的。本节描述它们的特征、相似之处和不同之处。MySQL承认日期
,DATETIME
,时间戳
中描述的几种格式的值第9.1.3节“日期和时间字面值”.为日期
而且DATETIME
范围描述,”支持”意味着尽管早期的值可能有效,但不能保证有效。
的日期
类型用于有日期部分但没有时间部分的值。MySQL检索和显示日期
值'
格式。支持的范围为YYYY-MM-DD
'“1000-01-01”
来“9999-12-31”
.
的DATETIME
类型用于同时包含日期和时间部分的值。MySQL检索和显示DATETIME
值'
格式。支持的范围为YYYY-MM-DD hh: mm: ss
'“1000-01-01”就是
来“9999-12-31 23:59:59”
.
的时间戳
数据类型用于同时包含日期和时间部分的值。时间戳
有一系列的“1970-01-01 00:00:01”
UTC,“2038-01-19 03:14:07”
UTC。
一个DATETIME
或时间戳
Value可以包括后面的小数秒部分,精度最高可达微秒(6位数)。的值中的任何小数部分DATETIME
或时间戳
列被存储而不是被丢弃。包括小数部分后,这些值的格式为'
,为YYYY-MM-DD hh: mm: ss
(。分数
]“DATETIME
值“1000-01-01 00:00:00.000000”
来“9999-12-31 23:59:59.999999”
的范围时间戳
值“1970-01-01 00:00:01.000000”
来“2038-01-19 03:14:07.999999”
.小数部分应始终与其余部分以小数点隔开;不识别其他小数秒分隔符。有关MySQL中分数秒支持的信息,请参见第11.2.7节“时间值中的小数秒”.
的时间戳
而且DATETIME
数据类型提供自动初始化和更新到当前日期和时间。有关更多信息,请参见第11.2.6节,TIMESTAMP和DATETIME的自动初始化和更新.
MySQL转换时间戳
从当前时区到UTC的值用于存储,从UTC到当前时区的值用于检索。(这不会发生在其他类型,如DATETIME
)。默认情况下,每个连接的当前时区是服务器的时间。可以根据每个连接设置时区。只要时区设置保持不变,您就会得到您存储的相同值。如果你存储时间戳
值,然后更改时区并检索该值,检索的值与您存储的值不同。这是因为在两个方向的转换中没有使用相同的时区。的值中显示当前时区time_zone
系统变量。有关更多信息,请参见章节5.1.13,“MySQL服务器时区支持”.
无效的日期
,DATETIME
,或时间戳
值转换为”零”适当类型的值(“0000-00-00”
或“0000-00-00”就是
),如果SQL模式允许这种转换。准确的行为取决于严格的SQL模式和NO_ZERO_DATE
启用SQL模式;看到章节5.1.10,“Server SQL模式”.
注意MySQL中数据值解释的某些属性:
MySQL允许”放松”以字符串形式指定的值的格式,其中任何标点字符都可以用作日期部分或时间部分之间的分隔符。在某些情况下,这种语法可能具有欺骗性。例如,一个值,如
“10:11:12”
可能看起来像一个时间值,因为:
,但被解释为年“2010-11-12”
如果在日期上下文中使用。的值“10:45:15
转换为“0000-00-00”
因为“45”
不是有效的月份。日期和时间部分与小数秒部分之间唯一可识别的分隔符是小数点。
服务器要求月和日值有效,而不仅仅是1到12和1到31的范围。禁用严格模式后,无效日期如
“2004-04-31”
被转换为“0000-00-00”
并生成一个警告。启用严格模式后,无效日期将生成错误。要允许这样的日期,启用ALLOW_INVALID_DATES
.看到章节5.1.10,“Server SQL模式”,以获取更多资料。MySQL不接受
时间戳
在日或月列中包含零的值或不是有效日期的值。这个规则唯一的例外是特殊的”零”价值“0000-00-00”就是
,如果SQL模式允许此值。准确的行为取决于严格的SQL模式和NO_ZERO_DATE
启用SQL模式;看到章节5.1.10,“Server SQL模式”.包含2位年份值的日期是不明确的,因为世纪是未知的。MySQL使用以下规则解释2位年份值:
范围内的年份值
00 - 69
成为2000 - 2069
.范围内的年份值
70 - 99
成为1970 - 1999
.
另请参阅第11.2.9节“2位数字年份”.
MySQL服务器可以使用MAXDB
启用SQL模式。在这种情况下,时间戳
是相同的DATETIME
.如果在创建表时启用了此模式,时间戳
列创建为DATETIME
列。因此,这样的列使用DATETIME
显示格式,具有相同的值范围,并且没有自动初始化或更新到当前日期和时间。看到章节5.1.10,“Server SQL模式”.
从MySQL 5.7.22开始,MAXDB
弃用;希望在MySQL的未来版本中删除它。