表示时间值的日期和时间数据类型是日期
那时间
那约会时间
那时间戳
,年
.每种时态类型都有一个有效值范围,以及一个“零“当您指定MySQL不能表示的无效值时,可以使用该值。这时间戳
和约会时间
类型具有特殊的自动更新行为,参见第11.2.5节,“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.8节“日期中的2位数”.
根据规则将值从一个时间类型转换为另一个时间类型第11.2.7节“日期和时间之间的转换”.
如果值在数字上下文中使用,MySQL会自动将日期或时间值转换为数字,反之亦然。
默认情况下,当MySQL遇到超出范围或其他类型的时间类型或其他类型无效的值时,它将值转换为“零“该类型的价值。例外是超出范围
时间
值剪辑到适当的终点时间
范围。通过将SQL模式设置为适当的值,您可以更准确地指定您希望MySQL支持的类型的日期。(看第5.1.11节,“服务器SQL模式”。)你可以让MySQL接受某些日期,例如
'2009-11-31'
,通过实现ALLOW_INVALID_DATES
SQL模式。当您想要存储一个时,这很有用“可能错了“用户在数据库中指定的值(例如,在Web表单中)用于将来处理。在此模式下,MySQL仅验证月份为1到12的范围,并且当天的时间在1到31的范围内。MySQL允许您存储日期,日期或月份和日期为零
日期
或约会时间
列。这对于需要存储您可能不知道确切日期的生日的应用程序是有用的。在本例中,您只需将日期存储为“2009-00-00”
或'2009-01-00'
.但是,在诸如这些之类的日期,您不应该指望对诸如此类的功能获得正确的结果date_sub()
或DATE_ADD ()
这需要完整的日期。要禁止日期中的零月或一天部分,请启用NO_ZERO_IN_DATE
模式。mysql允许您存储一个“零“的价值
'0000-00-00'
作为一个“假日。“在某些情况下,这比使用更方便零
值,并使用更少的数据和索引空间。对不允许'0000-00-00'
,使no_zero_date.
模式。“零“通过连接器/ ODBC使用的日期或时间值将自动转换为
零
因为ODBC不能处理这样的值。
下表显示了格式“零“每种类型的值。这“零“值是特殊的,但您可以使用表中显示的值显式存储或引用它们。您还可以使用值执行此操作'0'
或0.
,这更易于写。对于包含日期部分的时间类型(日期
那约会时间
,时间戳
)使用这些值可能会产生警告或错误。精确的行为取决于严格和的,如果有的话no_zero_date.
SQL模式已启用;看第5.1.11节,“服务器SQL模式”.