3

これをシンプルにしようと思います。MySQL データベース テーブルで BIGINT データ型を使用しています。12 桁から 13 ダイジェストの長さの一意の乱数を生成する関数があります。

長さが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 の場合は、問題なく数字が挿入されます。誰かがこの謎に光を当てるのを手伝ってくれるかもしれません! 再度、感謝します!

big int データ型:

bigint(200) 
4

2 に答える 2

8

数値は PHP_INT_MAX 以降から精度を失います。参照: http://www.php.net/manual/en/reserved.constants.php#constant.php-int-max

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

于 2012-04-24T01:44:08.100 に答える