SQL bigint 数据类型被 gettype() 视为字符串;功能。为什么?

SQL bigint data type seen as string by gettype(); function. why?

1) 我想了解为什么当我在 php 中调用 gettype(); 时,存储为 bigint 的数字数据被视为 'string'

2) php 是否有函数 is_bigint(); 可以检查变量是否为 bigint。

3) 当它是 bigint 时,我如何检查数据类型,因为乘以 1 或将 0 添加到与数字和字母混合的字符串将重新运行 'Notice: A non well formed numeric value encountered in line 2' 并在现在相乘的数据上调用 gettype();输入将 return:integer

简单的回答是 PHP 没有 bigint 类型。数据库驱动程序,或者无论您从何处获取该值,都会以字符串形式为您提供数据,因为这是表示该值的唯一可靠方式。

在64位系统上,PHP的int类型应该是有符号的64位整数;但在 32 位系统上,它将是 32 位的,因此您的值不适合。您可以通过回显 PHP_INT_MAX built-in constant 来仔细检查,这会为您提供可以在 PHP.

构建中存储在整数中的最大值

要判断该值是否全部为数字,您可以使用 ctype_digit($value),但这不适用于负数,因为 - 不是数字。我知道的最好方法是使用正则表达式,例如preg_match('/^-?[0-9]+/', $value).

如果您的值合适(即介于 PHP_INT_MINPHP_INT_MAX 之间),您可以将字符串转换为带有 (int)$valueintval($value) 的整数,不需要对于像 +0*1.

这样的技巧

如果他们不这样做,您将需要将它们作为浮点数处理,如果运算结果对于整数来说太大,这就是 PHP 所做的,但这意味着不精确地存储它们;或使用任意精度的数学模块,如 GMP or BCMath.