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

时间:2018-07-01 00:07:06

标签: php sqldatatypes bigint

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

2)是否有诸如PHP的is_bigint();之类的函数可以检查变量是否为bigint。

3)当bigint乘以1或在由数字和字母混合的字符串中加0时,如何重新检查数据类型,将重新运行'Notice: A non well formed numeric value encountered in line 2'并在现在乘以的数据类型上调用gettype();返回:integer

1 个答案:

答案 0 :(得分:3)

简单的答案是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就会这样做,但意味着存储不精确;或使用GMPBCMath之类的任意精度的数学模块。