更新时间:2025-09-09 GMT+08:00
分享

日期与时间数据类型

表1 日期与时间数据类型

数据类型

与MySQL的差异

DATE

无差异。

DATETIME[(fsp)]

具体差异请参见表格下方说明中的内容。

TIMESTAMP[(fsp)]

GaussDB支持timestamp数据类型,与MySQL相比规格上存在如下差异:

  • MySQL支持设置explicit_defaults_for_timestamp ,当explicit_defaults_for_timestamp设置为off时,对TIMESTAMP字段的默认值、插入NULL等处理为非标准行为。MySQL 5.7下,explicit_defaults_for_timestamp默认值为off;MySQL 8.0下,explicit_defaults_for_timestamp默认值为on。GaussDB不支持设置explicit_defaults_for_timestamp,行为与MySQL设置explicit_defaults_for_timestamp为on时的行为相同。explicit_defaults_for_timestamp相关说明参见表格下方内容。
  • 其余差异请参见表格下方说明中的内容。

TIME[(fsp)]

GaussDB支持TIME数据类型,与MySQL相比规格上存在如下差异:

  • 当时间类型的时、分、秒、纳秒为0时,GaussDB和MySQL可能存在符号位不同的情况。
  • 其余差异请参见表格下方说明中的内容。

YEAR[(4)]

GaussDB支持YEAR数据类型,与MySQL相比规格上存在如下差异:

MySQL 5.7中YEAR列默认显示为YEAR(4)。GaussDB与MySQL 8.0一致,只显示YEAR。

  • GaussDB不支持ODBC语法的字面量:

    { d 'str' }

    { t 'str' }

    { ts 'str' }

  • 当指定DATETIME、TIME、TIMESTAMP数据类型的精度超过其支持的最大精度时,GaussDB会将精度截断成支持的最大精度,MySQL则会报错。
  • MySQL中当explicit_defaults_for_timestamp为off时,对TIMESTAMP类型的字段的处理逻辑如下:
    • 未显式指定NULL/NOT NULL属性的字段,将自动添加NOT NULL属性。向此类字段插入NULL值时,会将NULL值替换为当前时间戳。
    • 如果未给表中的第一个TIMESTAMP类型的字段指定NULL属性,会自动给该字段添加DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP属性。
    • 如果未给表中的第二个及之后的TIMESTAMP类型的字段指定NULL属性,会自动给该字段添加DEFAULT '0000-00-00 00:00:00'属性。
  • MySQL中当explicit_defaults_for_timestamp为on时,对TIMESTAMP类型的字段的处理逻辑如下:
    • 向TIMESTAMP类型的字段插入NULL值时,不会将NULL值替换为当前时间戳。
    • 未显式指定NULL/NOT NULL属性的字段,将自动添加NULL属性。
    • 向指定了NOT NULL属性的字段插入NULL值时,严格模式下报错,宽松模式下将插入'0000-00-00 00:00:00'。
    • 不会为任何TIMESTAMP类型的字段自动添加DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP属性。

相关文档