我在两个不同的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
任何人都可以对此有所了解吗?
答案 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。除了错误修复之外,它们还具有可能对您的系统而言必需的安全修复程序。