bigint超出范围错误,该数据类型用于非常大的数字



我试图存储一些哈希值(最初是十六进制),但我将它们转换为int以保存在pgsql中,但得到

select 12347933502038296527::bigint
ERROR:  bigint out of range
********** Error **********
ERROR: bigint out of range
SQL state: 22003

我意识到这个数字对于int8类型来说太大了,我应该使用什么数据类型来代替int8?decimal对我的情况有用吗?还有其他的策略可以节省这么大的数字吗?

Bigint是相当大的。需要比这更大的东西是不寻常的。在大多数数据库中,这是本机二进制表示所能达到的极限。Decimal/numeric通常允许稍大的精度

相比之下,Postgres支持numeric/decimal,基本上具有无限的精度,如文档中所述。

下面直接起作用:

select 12347933502038296527::decimal

如果你想更具体:

select 12347933502038296527::decimal(20, 0)

也就是说,如此大的数字通常用作id。在这种情况下,您可能希望使用字符串而不是数字表示。例如,字符串具有保留前导零的优点。

相关内容

最新更新