MySQL 以 'hh:mm:ss'
格式检索和显示 TIME
值(对于较大的小时值,则以 'hhh:mm:ss'
格式)。TIME
值的范围从 '-838:59:59'
到 '838:59:59'
。小时部分可能如此大,因为 TIME
类型不仅可以用于表示一天中的时间(必须小于 24 小时),还可以用于表示经过时间或两个事件之间的时间间隔(可能远大于 24 小时,甚至为负数)。
MySQL 识别几种格式的 TIME
值,其中一些格式可以包含尾随的小数秒部分,最多可以精确到微秒(6 位数)。参见 第 11.1.3 节,“日期和时间字面量”。有关 MySQL 中小数秒支持的信息,请参见 第 13.2.6 节,“时间值中的小数秒”。特别是,插入 TIME
列的值中的任何小数部分都会被存储,而不是被丢弃。包含小数部分后,TIME
值的范围为 '-838:59:59.000000'
到 '838:59:59.000000'
。
在将简写值分配给 TIME
列时要小心。MySQL 将带有冒号的简写 TIME
值解释为一天中的时间。也就是说,'11:12'
表示 '11:12:00'
,而不是 '00:11:12'
。MySQL 将没有冒号的简写值解释为假设最右边的两位数字代表秒(也就是说,作为经过时间而不是一天中的时间)。例如,您可能认为 '1112'
和 1112
表示 '11:12:00'
(11 点后的 12 分钟),但 MySQL 将它们解释为 '00:11:12'
(11 分钟 12 秒)。类似地,'12'
和 12
被解释为 '00:00:12'
。
时间部分和小数秒部分之间唯一识别的分隔符是句点。
默认情况下,超出 TIME
范围但否则有效的值会被剪切到该范围的最近端点。例如,'-850:00:00'
和 '850:00:00'
会被转换为 '-838:59:59'
和 '838:59:59'
。无效的 TIME
值会被转换为 '00:00:00'
。请注意,因为 '00:00:00'
本身是一个有效的 TIME
值,所以无法从存储在表中的 '00:00:00'
值中判断原始值是指定为 '00:00:00'
还是无效的。
为了更严格地处理无效的 TIME
值,请启用严格 SQL 模式以使错误发生。参见 第 7.1.11 节,“服务器 SQL 模式”。