php&中最大数量的目的MySQL的

时间:2013-09-26 09:05:14

标签: php mysql

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中。

3 个答案:

答案 0 :(得分:3)

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

乘法结果转换为float

答案 1 :(得分:1)

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

当您将数字乘以较大数字时,PHP会识别出此新值不适合integer并将类型转换为longfloat。在后一种情况下,您会失去一些精确度,因此在考虑代码如何影响变量类型时,请务必小心。在某些语言中,如果尝试设置的值大于该类型允许的值,则会收到错误,因为语言会拒绝自动更改类型。通过这种方式,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)

答案 2 :(得分:0)

在计算领域,基于我们使用的计算机硬件的数学模型存在许多限制。

例如,如果我们决定在1位内存中表示整数,那么我们就可以表示数字0和1。

如果我们将其增加到8163264 bits的更常见值,那么我们可以表示以下数量的不同值:< / p>

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

当然,如果我们希望能够表示负数,那么我们可以对整数进行符号(使用一位表示负数或正数)。在32 bit signed integer的情况下,这可以让我们代表数字:−(2^31)2^31 − 1-2,147,483,648+2,147,483,647(与数字相同的上限)在你的问题中)。

整数可以说是计算机系统中最简单的数字表示形式(超出直接二进制),但由于系统的固有限制,我们经常需要使用其他系统来处理我们无法用整数表示的更大数字。当超过限制时,PHP将从使用整数切换到使用floating point numbers

您在PHP中看到的限制是编译的,并且将取决于编译器的体系结构。看起来你的PHP编译为32位。

您可以在computer number systems on Wikipedia上阅读更多内容。