转换为 int 的字符串太大

string converted to int is too large

我正在使用 php-activerecord 来管理我的 MySQL 条目。

出现问题的代码块如下:

$item->id = $result->id;
$item->save();

var_dump($result->id); // string(10) "2386737351" 
var_dump($item->id);   // int(2147483647)

问题是 $result->id 本来应该是 string(10) "2386737351",但 $item->id 变成了 int(2147483647)。我的专栏 idBIGINT 类型的,所以没问题。

看起来 php-activerecord 再次将该值转换为 int,其上限为 2147483647。

显然这是非常错误的,导致 Duplicate entry '2147483647' for key 'unique'

我该如何克服这个问题?

Native 64-bit integers require 64-bit hardware AND the 64-bit version of PHP.

On 32-bit hardware: $ php -r 'echo PHP_INT_MAX;' 2147483647

On 64-bit hardware: $ php -r 'echo PHP_INT_MAX;' 9223372036854775807

正如斯科特在这个问题上所说:how to have 64 bit integer on PHP?

所以你必须使用 PHP 64 位版本才能使用 BIGINT,否则它们将自动(或不自动,你会得到一个错误)转换为整数。

由于 column.php 中的设置,您的 BIGINT 正在转换为 int。虽然 "real solution" 将是 运行 64 位系统,但如果不能,另一件事可能是阻止转换发生

看看 line 37 in column.php ,我建议你改一下。我自己还没有尝试过,但我想这可以解决问题:

'bigint'    => self::STRING,