表示时态值的日期和时间数据类型为日期
,时间
,DATETIME
,时间戳
,一年
.每个时态类型都有一个有效值范围,以及”零”当你指定一个MySQL不能表示的无效值时,可以使用这个值。的时间戳
而且DATETIME
类型具有特殊的自动更新行为,如第11.2.6节,TIMESTAMP和DATETIME的自动初始化和更新.
有关临时数据类型的存储需求的信息,请参见第11.7节“数据类型存储要求”.
有关操作时间值的函数的描述,请参见第12.7节“日期和时间函数”.
在使用日期和时间类型时,请记住这些一般注意事项:
MySQL以标准输出格式检索给定日期或时间类型的值,但它尝试解释您提供的输入值的各种格式(例如,当您指定要分配给日期或时间类型或与之比较的值时)。有关日期和时间类型的允许格式的说明,请参见第9.1.3节“日期和时间字面值”.希望您提供有效值。如果使用其他格式的值,可能会出现不可预知的结果。
虽然MySQL尝试以多种格式解释值,但日期部分必须始终按照年-月-日的顺序给出(例如,
“98-09-04”
),而不是在其他地方常用的月-日-年或日-月-年的顺序(例如,“09-04-98”
,“04-09-98”
).要将其他顺序中的字符串转换为年-月-日顺序,可以使用STR_TO_DATE ()
函数可能有用。包含2位年份值的日期是不明确的,因为世纪是未知的。MySQL使用以下规则解释2位年份值:
范围内的年份值
70 - 99
成为1970 - 1999
.范围内的年份值
00 - 69
成为2000 - 2069
.
另请参阅第11.2.9节“2位数字年份”.
中的规则将值从一种时态类型转换为另一种时态类型第11.2.8节“日期和时间类型之间的转换”.
如果在数值上下文中使用日期或时间值,MySQL会自动将该值转换为数字,反之亦然。
默认情况下,当MySQL遇到日期或时间类型的值超出范围或对该类型无效时,它将该值转换为”零”值。唯一的例外是超出范围
时间
对象的适当端点被剪切时间
的范围内。通过将SQL模式设置为适当的值,可以更精确地指定希望MySQL支持的日期类型。(见章节5.1.10,“Server SQL模式”)。您可以让MySQL接受特定的日期,例如
“2009-11-31”
,通过启用ALLOW_INVALID_DATES
SQL模式。当您想要存储”可能错了”用户在数据库中指定(例如,在web表单中)的值,以便将来处理。在这种模式下,MySQL只验证月份在1到12的范围内,而日期在1到31的范围内。MySQL允许您存储日或月和日为零的日期
日期
或DATETIME
列。这对于需要存储您可能不知道确切日期的出生日期的应用程序非常有用。在本例中,只需将日期存储为“2009-00-00”
或“2009-01-00”
.但是,使用这样的日期,您不应该期望得到函数的正确结果,例如DATE_SUB ()
或DATE_ADD ()
这需要完整的日期。要禁用日期中的零月或零日部分,请启用NO_ZERO_IN_DATE
模式。MySQL允许你存储一个”零”的价值
“0000-00-00”
作为一个”假日期。”在某些情况下,这比使用更方便零
值,并使用更少的数据和索引空间。对不允许“0000-00-00”
,启用NO_ZERO_DATE
模式。”零”通过Connector/ODBC使用的日期或时间值将自动转换为
零
因为ODBC不能处理这样的值。
的格式如下表所示”零”值。的”零”值是特殊的,但是您可以使用表中显示的值显式地存储或引用它们。您还可以使用值来完成此操作' 0 '
或0
,这样写起来更容易。对于包含日期部分的时态类型(日期
,DATETIME
,时间戳
),使用这些值可能会产生警告或错误。精确的行为取决于严格的和NO_ZERO_DATE
启用SQL模式;看到章节5.1.10,“Server SQL模式”.