我有一个数据库和一个bigint列类型。每次我向此列插入值时,我总是得到错误的数字。例如,我插入值“198705122006041001”,它总是插入此值“2147483647”。
我使用laravel作为我的项目,如果我使用eloquent来显示bigint,它将无法正确显示,但如果我手动使用PDO,它将正确显示。
答案 0 :(得分:3)
PHP没有bigint数据类型,它会溢出并使用int.max。你必须将bigints表示为字符串或浮点数。请注意,浮动不精确,可能会导致意外。
在MySQL中进行数学变换,并且在必要时不要忘记强制转换为bigint。
答案 1 :(得分:2)
您应该再次检查,因为它绝对是int
,而不是bigint
。 2147483647
是maximum possible value for signed int
答案 2 :(得分:1)
见https://laracasts.com/discuss/channels/eloquent/fbid-bigint-with-model-and-eloquent。 Laravel用户遇到了同样的问题,最终不得不将结果转换为字符串。
另一位用户评论指出,XAMPP仅提供32位PHP二进制文件,这限制了PHP整数的大小。
使用以下代码检查PHP整数大小:
<?php
echo "Integer size can be determined using the constant PHP_INT_SIZE="
. (PHP_INT_SIZE * 8)
. " bits, maximum value using the constant PHP_INT_MAX="
. PHP_INT_MAX;
另见http://php.net/manual/en/language.types.integer.php
安装https://laravel.com/docs/5.3/homestead并获取64位PHP二进制文件。