SQL bigint 数据类型被 gettype() 视为字符串;函数. 为什么?



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();将返回:integer

简单的答案是 PHP 没有 bigint 类型。数据库驱动程序(或从中获取该值的任何位置(将数据作为字符串提供,因为这是表示值的唯一可靠方法。

在 64 位系统上,PHP 的 int 类型应该是有符号的 64 位整数;但在 32 位系统上,它将是 32 位,因此您的值不适合。您可以通过回显PHP_INT_MAX内置常量来仔细检查,这为您提供了可以在 PHP 构建中存储在整数中的最大值。

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

如果你的值适合(即在PHP_INT_MINPHP_INT_MAX之间(,你可以将字符串转换为带有(int)$valueintval($value)的整数,不需要像+0*1这样的技巧。

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

最新更新