如何使用PHP为2 ^ 63-1(带符号int)的列准备2 ^ 64(无符号bigint)?

问题描述 投票:0回答:1

我需要将数字17557386533328272186存储在一个已签名的bigint列中。

Postres不支持无符号字段,因为SQL规范没有定义无符号字段。这样,可以在Postgres bigint列中存储的最大整数是9223372036854775807

如果我想存储this perceptual hashing library中的值,我需要能够存储通常在2 ^ 64范围内的无符号整数。

我的号码正在由GMP处理,因此基于GMP的解决方案是一个很好的解决方案。

php postgresql gmp
1个回答
0
投票

在插入数据库之前减去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);
© www.soinside.com 2019 - 2024. All rights reserved.