我需要将数字17557386533328272186
存储在一个已签名的bigint列中。
Postres不支持无符号字段,因为SQL规范没有定义无符号字段。这样,可以在Postgres bigint列中存储的最大整数是9223372036854775807
。
如果我想存储this perceptual hashing library中的值,我需要能够存储通常在2 ^ 64范围内的无符号整数。
我的号码正在由GMP处理,因此基于GMP的解决方案是一个很好的解决方案。
在插入数据库之前减去2 ^ 63,然后在检索它时再次添加它:
$max = '9223372036854775807'; // 2^63
$realValue = '17557386533328272186';
$dbValue = gmp_sub($realValue, $max);
var_dump($dbValue);
// INSERT (?), $dbvalue
// Get the value back again
// $dbValue = SELECT dbValue
$realValue = gmp_add($dbValue, $max);
var_dump($realValue);