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)."')");

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

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

大 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 回答
1

我假设您在谈论 32 位服务器。但在我的服务器中,PHP 似乎并没有失去精度。 echo(PHP_INT_MAX . "<br/>"); $big_int = -6174803190685607000; echo($big_int . '<br/>'); 输出 9223372036854775807<br/>-6174803190685607000<br/>

可悲的是,我仍然失去了精度。我猜这可能是因为我在 mysqli 的准备语句中使用了“i”,但我无法证明这一点。

于 2015-10-26T17:12:36.070 回答