5

php和mysql中最大数量限制的主要目的是什么?
这是否意味着我们可以/不能处理或存储大于限制的数字?

我回应PHP_INT_MAX,它显示2147483647

我乘以并得到我认为已经超过限制的 1000000000000000000000答案?2.147483647E+30

请指教。

非常感谢您的指导。

当我考虑验证用户表单输入时,就会出现这个问题。我想确保用户输入是根据我们定义的数字格式而不是其他的。
然后我做了一些在线搜索以寻找最佳实践并意识到这个“限制”,但不知道在使用 PHP 和 MYSQL 时如何正确处理它。请给个建议:

步骤1:修剪并将用户表单输入的“字符串数字”转换为数字。
第 2 步:验证数字是否为正整数格式。
第 3 步:验证数量不超过我的“最大限制”。
由于 php 限制 (2,147,483,647) 小于 mysql 限制 (18,446,744,073,709,500,000)?我将 php 作为我的最大限制。
第 4 步:执行一些计算...
第 5 步:验证我的结果没有超过我的最大限制。
第6步:将结果存储在mysql中。

4

3 回答 3

3

这是CPU的硬件限制。您仍然可以使用bc 数学函数来处理更大的数字。在 mysql 中,它是关于对齐字节的,所以它知道哪个偏移量是哪个列。

乘法结果转换为float

于 2013-09-26T09:08:10.473 回答
1

PHP_INT_MAXinteger是您可以在此 PHP 版本(在您的情况下为 32 位)上使用的最大值的常数。如果您的操作系统和 CPU 支持 64 位,您可以使用 64 位构建的 PHP 来支持更大的整数数字。(如果开发人员围绕 64 位构建的限制设计代码,然后在 32 位构建上使用,假设类型很重要,这会导致问题。)

当您将数字乘以更大的数字时,PHP 会识别出这个新值不适合 aninteger并将类型转换为 alongfloat。在后一种情况下,您会失去一些精度,因此在考虑代码如何影响变量类型时要小心,这一点很重要。在某些语言中,尝试设置大于该类型允许的值时会收到错误消息,因为该语言会拒绝为您自动更改类型。通过这种方式,PHP 是一种更基本的编程语言。

<?php
$my_number = PHP_INT_MAX;
var_dump(gettype($my_number), $my_number);
$my_number = $my_number * 1000000000000000000000;
var_dump(gettype($my_number), $my_number);

Output:
string(7) "integer"
int(2147483647)
string(6) "double"
float(2.147483647E+30)
于 2013-09-26T09:18:14.680 回答
0

In the world of computing, there are many limits based upon the mathematical model of the computer hardware we use.

For instance, if we decided to represent an integer number in 1 bit of memory, then we would be able to represent the numbers 0 and 1.

If we were to increase that to the more common values of 8, 16, 32 or 64 bits then we can represent the following number of distinct values:

  • 2^8 - 256,
  • 2^16 - 65,536,
  • 2^32 - 4,294,967,296,
  • or 2^64 - 18,446,744,073,709,551,616.

Of course, if we wish to be able to represent negative numbers then we can sign the integer (use one bit to indicate negative or positive). In the case of a 32 bit signed integer this would allow us to represent the numbers: −(2^31) to 2^31 − 1 or -2,147,483,648 to +2,147,483,647 (the same upper limit as the number in your question).

Integers are arguably the simplest form of number representation in a computer system (beyond straight binary), but because of the inherent limits of the system, we will often need to use other systems for larger numbers that we cannot represent with an integer. PHP will switch from using an integer to using floating point numbers when the limit is exceeded.

The limit you are seeing in PHP is compiled in, and will depend upon the architecture of the compiler. It looks as if your PHP was compiled as 32 bits.

You can read up far more on computer number systems on Wikipedia.

于 2013-09-26T09:32:22.127 回答