39

我应该使用什么 PostgreSQL 列类型来存储 Java BigDecimal?

4

3 回答 3

33

请参阅PostgreSQL 数据类型- 可能是Numeric,它可以充当任意精度类型(这是 PostgreSQL 扩展)。

...没有任何精度或比例创建一个列,其中可以存储任何精度和比例的数值,直到精度的实现限制。

不过,我并不完全确定“精度的实施限制”是什么。从未尝试过非常大的数字。如果达到限制,则可以回退text。但是,我怀疑在那之前还会有其他重要问题 ;-) 如果您希望存储更少,则指定精度和/或比例为numeric.

正如 sjr 指出的那样编辑,限制是 1000 个十进制数字的精度(来自同一个链接):

numeric 类型可以存储高达 1000 位精度的数字 [在当前的实现中] 并精确地执行计算。特别推荐用于存储货币数量和其他需要精确性的数量...

如果需要更高的精度 - 尽管手头有更大的问题 - 那么数字列将不适合(单独)。但这实际上更像是一个非常极端的“假设”,并且可能不会起到限制作用。

于 2011-01-10T04:07:17.007 回答
8

只需将 Java 映射用于常见的 SQL 数据类型。在这种情况下,您可以使用 NUMERIC 或 DECIMAL。

于 2011-01-10T07:27:53.397 回答
0

我会使用decimal添加自己的比例和精度:

t.decimal "price", precision: 12, scale: 4, default: "0.0"
于 2020-09-02T07:22:34.667 回答