SEC_TO_TIME结果不正确

时间:2013-07-08 19:27:45

标签: mysql

我在两个不同的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

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

1 个答案:

答案 0 :(得分:2)

显然这是MySQL中的一个错误(在实现或文档中)。错误报告是here。它存在至4.1.23, 5.0.30 和5.1.13。直到那些版本,SEC_TO_TIME()不会剪辑(限制到上述边界)。在更改日志中,在以下版本中:

  

输入和输出TIME值缺乏验证导致   几个问题:子查询中的SEC_TO_TIME()被错误地剪裁了   大价值; SEC_TO_TIME()将BIGINT UNSIGNED值视为已签名;   截断和截断时只产生截断警告   发生了超出范围的TIME值。

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