MySQL中的BIGINT更改了我的号码?为什么这样做?

时间:2012-04-24 01:36:10

标签: php mysql biginteger bigint

我会尽量保持这一点。我在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)."')");

结果:  在第一种情况下,它会插入一个略有不同的数字,通常由于某种原因而舍入。

在第二种情况下,它插入数字就好了!也许有人可以帮助揭开这个神秘面纱!再次感谢!

big int数据类型:

bigint(200) 

2 个答案:

答案 0 :(得分:8)

数字从PHP_INT_MAX开始失去精确度。另见:http://www.php.net/manual/en/reserved.constants.php#constant.php-int-max

之后,它们变成了精度有限的浮子并导致奇怪的舍入问题。在PHP中支持BIGINT的唯一方法是使用字符串。

答案 1 :(得分:1)

我以为你在谈论32位服务器。 但在我的服务器中,PHP似乎没有失去精度。 echo(PHP_INT_MAX . "<br/>"); $big_int = -6174803190685607000; echo($big_int . '<br/>'); 产量 9223372036854775807<br/>-6174803190685607000<br/>

可悲的是,我仍然失去了精确度。我猜这可能是因为我在mysqli的准备声明中使用了'i',但我无法证明它。