1

我在两个不同的 MySQL 服务器上运行了以下 SELECT 语句。

SELECT SEC_TO_TIME(7124718)

MySQL 5.1.69 返回 838:59:59(不正确)

MySQL 5.0.22 返回 1979:05:18(正确)

我找到了关于 5.1 版 TIME 数据类型的文档,其中提到了从 -838:59:59 到 838:59:59 的限制

http://dev.mysql.com/doc/refman/5.1/en/time.html

5.0 文档说明了对 TIME 数据类型的相同限制。

http://dev.mysql.com/doc/refman/5.0/en/time.html

任何人都可以对此有所了解吗?

4

1 回答 1

2

显然这是 MySQL 中的一个错误(在实现或文档中)。错误报告在这里。它一直存在到 4.1.23、5.0.305.1.13。在那些版本之前,SEC_TO_TIME()不会剪辑(限制在上述范围内)。在变更日志中,在这些版本中:

缺少对输入和输出 TIME 值的验证导致了几个问题: 子查询中的 SEC_TO_TIME() 错误地裁剪了大值;SEC_TO_TIME() 将 BIGINT UNSIGNED 值视为有符号;当发生截断和超出范围的 TIME 值时,仅生成截断警告。

如果可以,请使用最新版本的 MySQL。除了错误修复之外,它们还具有您的系统可能需要的安全修复。

于 2013-07-08T20:06:51.210 回答