Мне нужно сохранить число 17557386533328272186
в подписанном столбце bigint.
Postres не поддерживает поля без знака, поскольку спецификация SQL не определяет поля без знака. Таким образом, наибольшее целое число, которое может храниться в столбце Postgres bigint, равно 9223372036854775807
.
Если я хочу сохранить значение из этой перцептивной хеширующей библиотеки , мне нужно иметь возможность хранить неподписанное целое число, которое будет регулярно находиться в диапазоне 2 ^ 64.
Мои номера обрабатываются GMP, поэтому решение на основе GMP является хорошим решением.
В итоге я получил следующее:
подписан на неподписанное (sql на работу):
gmp_strval(gmp_add(gmp_init($theirPhash, 10), gmp_pow(2, 63)), 16))
неподписан на подписан (на sql):
gmp_strval(gmp_sub(gmp_init("0x{$fileHash->toHex()}", 16), gmp_pow(2, 63)), 10)