我正在尝试存储一些散列(最初以十六进制),但我将它们转换为 int 以保存在 pgsql 中,但得到
select 12347933502038296527::bigint
ERROR: bigint out of range
********** Error **********
ERROR: bigint out of range
SQL state: 22003
Run Code Online (Sandbox Code Playgroud)
我意识到数字对于int8类型来说太大了,我应该使用什么数据类型而不是 int8?将decimal工作我的情况?有没有其他策略可以拯救如此大的数字?
Bigint 是相当大的。需要比这更大的东西是不寻常的。在大多数数据库中,这是您可以使用本机二进制表示的范围。 Decimal/numeric通常允许稍大的精度。
相比之下,Postgres以基本上无限的精度支持numeric/ decimal,如文档中所述。
以下直接工作:
select 12347933502038296527::decimal
Run Code Online (Sandbox Code Playgroud)
如果你想更具体:
select 12347933502038296527::decimal(20, 0)
Run Code Online (Sandbox Code Playgroud)
也就是说,通常使用如此大的数字作为 ID。在这种情况下,您可能希望使用字符串而不是数字表示。例如,字符串具有保留前导零的优点。
| 归档时间: |
|
| 查看次数: |
9152 次 |
| 最近记录: |