【发布时间】:2011-06-06 07:52:07
【问题描述】:
我应该使用哪种 PostgreSQL 列类型来存储 Java BigDecimal?
【问题讨论】:
标签: java postgresql bigdecimal
我应该使用哪种 PostgreSQL 列类型来存储 Java BigDecimal?
【问题讨论】:
标签: java postgresql bigdecimal
参见PostgreSQL datatypes - 可能是Numeric,它可以作为任意精度类型(这是一个PostgreSQL 扩展)。
...没有任何精度或比例创建一个列,其中可以存储任何精度和比例的数值,直到精度的实现限制。
不过,我不完全确定“精度的实现限制”是什么。从未尝试过真正大数字。如果达到限制,则可以回退到text。但是,我怀疑在那之前还会有其他重大问题 ;-) 如果您希望存储更少,则指定精度和/或比例为 numeric。
编辑正如 sjr 指出的那样,限制是 1000 个十进制数字的精度(来自同一链接):
类型 numeric 可以存储高达 1000 位精度的数字 [在当前的实现中] 并精确地执行计算。特别推荐用于存储货币数量和其他需要精确性的数量...
如果需要更多精度-尽管手头有更大的问题-那么数字列将不适合(单独)。但这实际上更像是一个非常极端的“假设”,并且可能不会起到限制作用。
【讨论】:
只需将 Java 映射用于常见的 SQL 数据类型。在这种情况下,您可以使用 NUMERIC 或 DECIMAL。
【讨论】:
我会使用 decimal 添加我自己的比例和精度:
t.decimal "price", precision: 12, scale: 4, default: "0.0"
【讨论】: