mysql:7992
From: "naruto" <"naruto" <mikiso@xxxxxxxxxx>>
Date: Sun, 6 Jul 2003 02:10:46 +0900
Subject: [mysql 07992] 符号なし BIGINT の限界値付近で数値比較結果が不正
はじめまして、三木と申します。 MySQLは2年ほど使っているのですがMLには初めてです。 宜しくおねがしいます。 早速質問したいことがあるのですが、 select 18446744073709551615 < 10; というクエリが、「1」(=true)を返します。 「18446744073709551615」は64bit unsigned intの 上限となる数値、つまり2^64-1です。 select 18446744073709551615 - 1; だと正しい整数の結果が、 select 18446744073709551615 + 1; だと浮動小数点に変換された結果が返ってきました。 (だから内部的にはBigint unsignedで正しく計算している気もする) まさかと思って select 18446744073709551615 = -1; とやったら、やっぱりというか、「1」が返ってきました(^^;) さすがにこんなわかりやすいバグっぽい挙動ならどこかに書いてあるだろう、 と思ってドキュメントを見たのですが、ちょっと見つけられませんでした。 BIGINT UNSIGNEDが絶対に必要、というほどではないので、 とりあえず単なるBIGINTにしてしのごう、と思っていますが、 上記のような挙動はMySQLの仕様なのでしょうか。 今後のために知っておきたいので、ご存じの方がいらっしゃいましたら よろしくお願いします。 ****************** Soichiro Miki mikiso@xxxxxxxxxx ******************
-> 7992 2003-07-06 02:10 ["naruto" <mikiso@xxx] 符号なし BIGINT の限界値付近で数値比較結果が不正 7993 2003-07-06 02:20 ┗["naruto" <mikiso@xxx]