[前][次][番号順一覧][スレッド一覧]

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]