我试图存储一些哈希值(最初是十六进制),但我将它们转换为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
通常允许稍大的精度
numeric
/decimal
,基本上具有无限的精度,如文档中所述。下面直接起作用:
select 12347933502038296527::decimal
如果你想更具体:
select 12347933502038296527::decimal(20, 0)
也就是说,如此大的数字通常用作id。在这种情况下,您可能希望使用字符串而不是数字表示。例如,字符串具有保留前导零的优点。