php中最大数字的用途&;mysql

php中最大数字的用途&;mysql,php,mysql,Php,Mysql,php和mysql中数字的最大限制的主要目的是什么? 这是否意味着我们可以/不能处理或存储大于限制的数字 我echoPHP\u INT\u MAX并显示2147483647 我乘以1000000000000000,得到的答案是2.147483647E+30,我认为这已经超出了限制 请告知 非常感谢您的指导 当我考虑验证用户表单输入时,会出现这个问题。我希望确保用户输入符合我们定义的数字格式,而不是其他格式。 然后,我在网上搜索了一些最佳实践,意识到了这个“限制”,但不知道在使用PHP和MYSQL

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

我echo
PHP\u INT\u MAX
并显示
2147483647

我乘以
1000000000000000
,得到的答案是
2.147483647E+30
,我认为这已经超出了限制

请告知

非常感谢您的指导

当我考虑验证用户表单输入时,会出现这个问题。我希望确保用户输入符合我们定义的数字格式,而不是其他格式。
然后,我在网上搜索了一些最佳实践,意识到了这个“限制”,但不知道在使用PHP和MYSQL时如何正确处理它。请告知:

步骤1:修剪用户表单输入“字符串编号”并将其转换为数字。
步骤2:验证数字是否为正整数格式。
步骤3:验证数字是否不超过我的“最大限制”。
因为php限制(2147483647)小于mysql限制(18446744073709500000)?我将以php作为我的最大限制。
步骤4:执行一些计算…
步骤5:验证我的结果不超过我的最大限制。

步骤6:将结果存储在mysql中

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


乘法结果将转换为。

PHP\u INT\u MAX
是可在此PHP构建中使用的最大
整数的常量(本例中为32位)。如果您的操作系统和CPU支持64位,则可以使用64位PHP构建来支持更大的整数。(如果开发人员围绕64位构建的限制来设计代码,然后在32位构建上使用代码(假设类型很重要),则会出现问题。)

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

在计算世界中,基于我们使用的计算机硬件的数学模型,存在许多限制

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

如果我们将其增加到更常见的值
8
16
32
64位
,那么我们可以表示以下数量的不同值:

  • 2^8-256
  • 2^16-65536
  • 2^32-4294967296
  • 2^64-18446744073709551616
当然,如果我们希望能够表示负数,那么我们可以对整数进行签名(使用一位表示负数或正数)。在
32位有符号整数的情况下
允许我们表示数字:
−(2^31)
2^31− 1
-2147483648
+2147483647
(上限与问题中的数字相同)

整数可以说是计算机系统中最简单的数字表示形式(除了直接二进制),但由于系统的固有限制,我们通常需要使用其他系统来表示不能用整数表示的较大数字。当超过限制时,PHP将从使用整数切换到使用

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


您可以阅读更多信息。

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