• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 位置: MySQL 8 中文手册 -> MySQL 数据类型

    日期和时间数据类型

    日期和时间数据类型用于表示时间值DATETIMEDATETIMETIMESTAMP,和YEAR。每个时间类型都有一个有效值范围,以及当您指定MySQL无法代表的无效值时可以使用的“零”值。该TIMESTAMPDATETIME类型有特殊的自动更新的行为,在描述“自动初始化和更新TIMESTAMP和DATETIME”。

    有关时间数据类型的存储要求的信息,请参见“数据类型的存储要求”。

    有关对时间值进行运算的函数的说明,请参见“日期和时间函数”。

    使用日期和时间类型时,请记住以下一般注意事项:

    • MySQL以标准输出格式检索给定日期或时间类型的值,但是MySQL尝试解释您提供的输入值的多种格式(例如,当您指定要分配给日期或时间的值或与之比较时,时间类型)。有关日期和时间类型的允许格式的说明,请参见“日期和时间文字”。期望您提供有效值。如果使用其他格式的值,则可能会发生不可预测的结果。
    • 尽管MySQL尝试以多种格式解释值,但日期部分必须始终以年-月-日顺序(例如'98-09-04')给出,而不是以其他地方通常使用的月-日-年或日-月-年顺序给出(例如'09-04-98''04-09-98')。要将其他顺序的字符串转换为年月日顺序,此STR_TO_DATE()功能可能会很有用。
    • 包含两位数年份值的日期是不明确的,因为世纪是未知的。MySQL使用以下规则解释两位数的年份值:

      • 范围内的年值70-99变为1970-1999
      • 范围内的年值00-69变为2000-2069

      另请参见“日期中的2位数字”。

    • 根据“日期和时间类型之间的转换”中的规则,将值从一种时间类型转换为另一种时间类型。
    • 如果在数字上下文中使用日期或时间值,则MySQL自动将日期或时间值转换为数字,反之亦然。
    • 默认情况下,当MySQL遇到日期或时间类型的值超出范围或对该类型无效时,它将将该值转换为该类型的“零”值。唯一的例外是超出范围的TIME值会被裁剪到该TIME范围的适当端点。
    • 通过将SQL模式设置为适当的值,可以更准确地指定希望MySQL支持的日期类型。(请参见“服务器SQL模式”。)'2009-11-31'通过启用ALLOW_INVALID_DATESSQL模式,可以使MySQL接受某些日期,例如。当您要在数据库中存储用户已指定(例如,以Web形式)指定的“可能错误”的值以供将来处理时,此功能很有用。在这种模式下,MySQL仅验证月份在1到12之间,并且日期在1到31之间。
    • MySQL允许您在DATEDATETIME列中存储日期或星期几为零的日期。这对于需要存储您可能不知道确切日期的生日的应用程序很有用。在这种情况下,您只需将日期存储为'2009-00-00'或即可'2009-01-00'。但是,对于这样的日期,您不应期望为诸如DATE_SUB()DATE_ADD()需要完整日期的函数获得正确的结果。要禁止日期中的零个月或日部分,请启用该NO_ZERO_IN_DATE模式。
    • MySQL允许您将“零”值存储'0000-00-00'为“虚拟日期”。”在一些情况下,这比使用更方便NULL的值,并且使用较少的数据和索引空间。要禁用'0000-00-00',请启用该NO_ZERO_DATE模式。
    • 通过连接器/ ODBC使用的“零”日期或时间值会自动转换为,NULL因为ODBC无法处理此类值。

    下表显示了每种类型的“零”值的格式。在“零”值是特殊的,但你可以存储或引用它们明确使用表中显示的值。您也可以使用更容易编写的值'0'或进行此操作0。对于包含日期部分(DATEDATETIMETIMESTAMP)的时间类型,使用这些值可能会产生警告或错误。精确的行为取决于启用了哪些严格NO_ZERO_DATE模式和 SQL模式(如果有);请参见“服务器SQL模式”。

    数据类型“零”值
    DATE'0000-00-00'
    TIME'00:00:00'
    DATETIME'0000-00-00 00:00:00'
    TIMESTAMP'0000-00-00 00:00:00'
    YEAR0000