【问题标题】:purpose of the max number in php & mysqlphp & mysql 中最大数量的用途
【发布时间】:2013-09-26 09:05:14
【问题描述】:

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

【问题讨论】:

  • 有多少个限制?例如,您的意思是整数变量只能将数字保持为某个值吗?
  • 目的是填充更少的字节。一个无符号的 tinyint 只有 8 位长(1 个字节),它的最大值只有 255(11111111),而我们使用的字节越多,我们使用的内存就越多。
  • 这是因为数字通常存储为 32 位或 64 位有符号/无符号整数或浮点数,因此它们受到用于存储它们的位数的限制
  • 2.147483647E+30 不是整数,所以不受整数的限制。

标签: php mysql


【解决方案1】:

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

相乘结果转换为float

【讨论】:

    【解决方案2】:

    PHP_INT_MAX 是您可以在此 PHP 版本(在您的情况下为 32 位)上使用的最大 integer 的常量。如果您的操作系统和 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)
    

    【讨论】:

      【解决方案3】:

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

      例如,如果我们决定在 1 位内存中表示一个整数,那么我们将能够表示数字 0 和 1。

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

      • 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 上阅读更多内容。

      【讨论】:

        猜你喜欢
        • 2012-06-30
        • 1970-01-01
        • 2012-01-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多