首页 > 解决方案 > SQL bigint 数据类型被 gettype() 视为字符串;功能。为什么?

问题描述

1)我想了解为什么存储的数字数据与我在 php.ini 中调用时bigint一样。'string'gettype();

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

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

标签: phpsqldatatypesbigint

解决方案


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

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

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

如果您的值适合(即介于PHP_INT_MINand之间PHP_INT_MAX),您可以使用 or 将字符串转换为整数,无需使用(int)$valueor之类的技巧。intval($value)+0*1

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


推荐阅读