SQL bigint 数据类型被 gettype() 视为字符串;功能。为啥?
Posted
技术标签:
【中文标题】SQL bigint 数据类型被 gettype() 视为字符串;功能。为啥?【英文标题】:SQL bigint data type seen as string by gettype(); function. why?SQL bigint 数据类型被 gettype() 视为字符串;功能。为什么? 【发布时间】:2018-12-09 16:40:23 【问题描述】: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();
将返回:@987654327 @
【问题讨论】:
【参考方案1】:简单的答案是 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_MIN
和PHP_INT_MAX
之间),您可以使用(int)$value
或intval($value)
将字符串转换为整数,无需像+0
或*1
这样的技巧.
如果没有,您需要将它们作为浮点数处理,如果运算结果对于整数来说太大,PHP 会这样做,但这意味着存储它们不精确;或使用任意精度的数学模块,如 GMP 或 BCMath。
【讨论】:
好的,我明白了,谢谢,我会检查字符串中的每个字符是否是数字,然后将字符串转换为 int 但9,223,372,036,854,775,807
会转换为整数吗?
@BobbyAxe 如果您的字符串中有这样的逗号,那么不,它不会直接转换为正确的值。但是如果数据库驱动程序给你一个这样的字符串,我会感到非常惊讶。如果你只是说“是不是太大了”,看看我提到的 PHP_INT_MAX 常量的值。
我的意思是没有逗号 例如:9223372036854775807
和 PHP_INT_MAX 返回 2147483647
@BobbyAxe 那么,这就是你的答案:在你的系统上,你可以存储在一个整数中的最大值是 2147483647。以上是关于SQL bigint 数据类型被 gettype() 视为字符串;功能。为啥?的主要内容,如果未能解决你的问题,请参考以下文章
SQL:数据类型 varchar 转换为 bigint 时出错?
是不是只有int,bigint,smallint,tinyint类型的在SQL语句中不用单引号