表示时间值的日期和时间数据类型是日期
,时间
,DATETIME
,时间戳
,一年
。
为日期
和DATETIME
范围描述,”支持”这意味着虽然早期的价值可能有效,但不能保证。
MySQL允许小数秒时间
,DATETIME
,时间戳
值,精度最高可达微秒(6位数字)。若要定义包含小数秒部分的列,请使用以下语法
,在那里type_name
(fsp
)type_name
是时间
,DATETIME
,或时间戳
,fsp
是小数秒精度。例如:
CREATE TABLE t1 (t TIME(3), dt DATETIME(6), ts TIMESTAMP(0));
的fsp
取值,如果给定,必须在0到6之间。值为0表示没有小数部分。如果省略,默认精度为0。(这不同于标准的SQL默认值6,为了与以前的MySQL版本兼容。)
任何时间戳
或DATETIME
表中的列可以有自动初始化和更新属性;看到章节11.2.6,“TIMESTAMP和DATETIME的自动初始化和更新”。
一个日期。支持范围为
“1000-01-01”
来“9999-12-31”
。MySQL显示日期
值”
格式,但是允许将值赋给YYYY-MM-DD
”日期
使用字符串或数字的列。日期和时间的组合。支持范围为
“1000-01-01 00:00:00.000000”
来“9999-12-31 23:59:59.999999”
。MySQL显示DATETIME
值”
格式,但是允许将值赋给YYYY-MM-DD hh: mm: ss
(。分数
]“DATETIME
使用字符串或数字的列。一个可选的
fsp
取值范围为0到6。可以指定小数秒精度。值为0表示没有小数部分。如果省略,默认精度为0。自动初始化并更新到当前日期和时间
DATETIME
可以使用默认的
和在更新
列定义子句,如章节11.2.6,“TIMESTAMP和DATETIME的自动初始化和更新”。一个时间戳。范围是
“1970-01-01 00:00:01.000000”
UTC,“2038-01-19 03:14:07.999999”
UTC。时间戳
值存储为自纪元(“1970-01-01”就是
UTC)。一个时间戳
不能表示该值“1970-01-01”就是
因为这相当于从纪元开始的0秒,值0保留用于表示“0000-00-00”就是
,”零”时间戳
价值。一个可选的
fsp
取值范围为0到6。可以指定小数秒精度。值为0表示没有小数部分。如果省略,默认精度为0。服务器处理的方式
时间戳
类的值决定了定义explicit_defaults_for_timestamp
系统变量(见第5.1.7节,“服务器系统变量”)。如果
explicit_defaults_for_timestamp
是否启用,没有自动分配默认CURRENT_TIMESTAMP
或在更新CURRENT_TIMESTAMP
任何属性时间戳
列。它们必须显式包含在列定义中。此外,任何时间戳
未显式声明为非空
许可证零
值。如果
explicit_defaults_for_timestamp
禁用,服务器处理时间戳
如下:除非另有说明,第一个
时间戳
表中的列被定义为如果没有显式地指定值,则自动设置为最近修改的日期和时间。这使得时间戳
用于记录时间戳插入
或更新
操作。你也可以设置任何时间戳
将当前日期和时间指定为零
值,除非已用零
属性允许零
值。可以使用指定自动初始化和更新到当前日期和时间
默认CURRENT_TIMESTAMP
和在更新CURRENT_TIMESTAMP
列定义条款。默认为第一个时间戳
列具有这些属性,如前所述。然而,任何时间戳
表中的列可以定义为具有这些属性。一段时间。范围是
“838:59:59.000000”
来“838:59:59.000000”
。MySQL显示时间
值”
格式,但是允许将值赋给hh: mm: ss
(。分数
]“时间
使用字符串或数字的列。一个可选的
fsp
取值范围为0到6。可以指定小数秒精度。值为0表示没有小数部分。如果省略,默认精度为0。4位数字格式的一年。MySQL显示
一年
值YYYY
格式,但是允许将值赋给一年
使用字符串或数字的列。值显示为1901
来2155
,或0000
。请注意的
(2)
data type已被弃用,MySQL 5.7.5中已移除对它的支持。将便是(2)
列4位一年
列,看到第11.2.5节,“两位数年份(2)的限制和向四位数年份迁移”。有关
一年
显示格式和输入值的解释,请参阅第11.2.4节,“年份类型”。
的SUM ()
和AVG ()
聚合函数不处理时间值。(它们将值转换为数字,丢失第一个非数字字符之后的所有内容。)要解决这个问题,请转换为数值单位,执行聚合操作,然后再转换回时间值。例子:
选择SEC_TO_TIME(总和(TIME_TO_SEC (time_col)))tbl_name;选择FROM_DAYS(总和(TO_DAYS (date_col)))tbl_name;
MySQL服务器可以使用MAXDB
启用SQL模式。在这种情况下,时间戳
是相同的,DATETIME
。如果在创建表时启用了这种模式,时间戳
列被创建为DATETIME
列。因此,这样的列使用DATETIME
显示格式,具有相同范围的值,并且没有自动初始化或更新到当前日期和时间。看到第5.1.10节,“服务器SQL模式”。
从MySQL 5.7.22起,MAXDB
弃用;我们希望在MySQL的未来版本中移除它。