1

2 つの異なる MySQL サーバーで次の SELECT ステートメントを実行しました。

SELECT SEC_TO_TIME(7124718)

MySQL 5.1.69 が 838:59:59 を返しました (正しくない)

MySQL 5.0.22 は 1979:05:18 (正しい) を返しました

-838:59:59 から 838:59:59 までの制限に言及しているバージョン 5.1 の TIME データ型に関するドキュメントを見つけました。

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.30 、および 5.1.13まで存在していました。これらのバージョンまでSEC_TO_TIME()は、クリップされません (前述の境界に制限されます)。変更ログでは、これらのバージョンで:

入力および出力の TIME 値の検証が行われていないため、いくつかの問題が発生しました。SEC_TO_TIME() は BIGINT UNSIGNED 値を符号付きとして扱いました。切り捨てと範囲外の TIME 値の両方が発生した場合、切り捨ての警告のみが生成されました。

可能であれば、最新バージョンの MySQL を使用してください。バグ修正に加えて、システムに必要なセキュリティ修正も含まれています。

于 2013-07-08T20:06:51.210 に答える