MySQL 以 'hh:mm:ss'
格式(或对于较大的小时值以 'hhh:mm:ss'
格式)检索和显示 TIME
值。 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 模式”。