2013-07-08 83 views
1

我在兩個不同的MySQL服務器上運行以下SELECT語句。SEC_TO_TIME結果不正確

SELECT SEC_TO_TIME(7124718) 

MySQL的69年5月1日返回838:59:59(不正確)

的MySQL 5.0.22返回1979:05:18(正確)

我發現時間數據類型文檔版本5.1,從-838提到限制:59:59至838:59:59

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

的5.0文檔指出時間數據類型相同的限制。

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

誰能一些線索呢?

+1

我不明白你對此感到困惑。該文檔正確地解決了您的問題。根據文檔,'838:59:59'是'TIME'數據類型的上界。 – BLaZuRE

+0

你的問題是什麼?它以5.1的方式工作 - 大量的合法價值被裁減到838:59:59。 –

+0

它聲明在5.0中存在相同的限制,但是我在MySQL 5.0.22上得到的結果是1979:05:18 – unu

回答

2

顯然這是MySQL中的一個bug(無論是在實現還是文檔中)。錯誤報告是here。它一直存在到4.1.23,5.0.30和5.1.13。直到這些版本,SEC_TO_TIME()不會剪輯(限於上述限制)。在更改日誌,在這些版本:

缺少驗證用於輸入和輸出時間值導致 幾個問題:在子查詢中SEC_TO_TIME()不正確地限幅 大的值; SEC_TO_TIME()將BIGINT UNSIGNED值視爲已簽名; 截斷警告和 超出範圍的TIME值發生時,只會產生截斷警告。

如果可以,請使用最新版本的MySQL。除了錯誤修復之外,它們還具有可能對您的系統有用的安全修復程序。