2012-04-24 6 views
3

私はこれを単純にしておきます。私は、MySQLデータベーステーブルでBIGINTデータ型を使用しています。私は、12桁から13桁の長さに及ぶユニークな乱数を生成する関数を持っています。MySQLのBIGINTは自分の番号を変更しますか?それはなぜこれをするのですか?

私は長さが12桁で数字をデータベースに挿入すると、それがうまく入り、

が、私は13桁以上の値を使用する場合、それは切り上げのように思えますか何か。ここ

PHP

$defaultText = 'some string'; //just some string 
$web_id = 12; 
$element_id = 23112182735363; //case 1 (doesn't work) 
//$element_id = 2311218333205; //case 2, does work() 
    mysql_query("INSERT INTO tableName (web_id, element_id, content) 
    VALUES ($web_id, $element_id, '".mysql_real_escape_string($defaultText)."')"); 

結果である:ケース1で が、それは通常、何らかの理由で切り上げ、わずかに異なる番号を挿入します。

ケース2の場合、ちょうどいい数字を挿入します!多分誰かがこの謎に光を当てるのを助けることができます!再度、感謝します!

大きなintデータ型は:

bigint(200) 
+0

ブラケット番号は、表示目的のためのもので、MySQLが表示する数字の桁数です。内部的にストレージ要件には何の影響もありません。bigintは常に64ビットです。つまり、最大20桁です。 MySQlに20を超えることのできない数字に200桁の数字を表示することは無意味です –

答えて

8

数字以降PHP_INT_MAXからその精度を失います。以下も参照してください:http://www.php.net/manual/en/reserved.constants.php#constant.php-int-max

その後、それらは浮動小数点に変換され、精度が制限され、奇妙な丸めの問題が発生します。 PHPでBIGINTをサポートする唯一の方法は、文字列を使用することです。

+0

ありがとう、私はこれが他の誰かを同じ問題で助けてくれることを願っています。私はそれを文字列に変更しました。 –

1

私はあなたが32ビットサーバーについて話していると仮定しました。 しかし私のサーバーでは、PHPは精度を失うことはありませんでした。 9223372036854775807<br/>-6174803190685607000<br/>

echo(PHP_INT_MAX . "<br/>"); $big_int = -6174803190685607000; echo($big_int . '<br/>'); 出力は、悲しいことに、私はまだ精度の負けを得ました。私はmysqliの準備声明に「私」を使用したので、それを推測しましたが、私はそれを証明できませんでした。

+0

ありがとうございました。私に電話しないでください。 ;) –

関連する問題