Какой тип столбца PostgreSQL следует использовать для хранения Java BigDecimal?

Какой тип столбца PostgreSQL следует использовать для хранения Java BigDecimal?


person dajood    schedule 10.01.2011    source источник


Ответы (3)


См. типы данных PostgreSQL — возможно, Numeric, который может действовать как тип произвольной точности (это расширение Postgres Pro).

... без какой-либо точности или масштаба создает столбец, в котором могут храниться числовые значения любой точности и масштаба, вплоть до предела точности реализации.

Однако я не совсем уверен, что такое «ограничение реализации по точности». Никогда не пробовал действительно большие числа. Если предел достигнут, то возможен откат к text. Но я подозреваю, что до этого будут другие серьезные проблемы ;-) Если вы хотите хранить меньше, укажите точность и/или масштаб до numeric.

Изменить, как указал sjr, ограничение составляет 1000 десятичных цифр точности (из той же ссылки):

Тип numeric может хранить числа с точностью до 1000 цифр [в текущих реализациях] и точно выполнять вычисления. Особенно рекомендуется для хранения денежных сумм и других величин, где требуется точность...

Если требуется более высокая точность, несмотря на наличие гораздо более серьезной проблемы, то числовой столбец не подойдет (сам по себе). Но на самом деле это скорее очень крайнее "что, если" и, вероятно, не играет ограничивающей роли.

person Community    schedule 10.01.2011
comment
Я отредактировал ваш пост в новейшей версии документов. 8.2 кажется немного устаревшим ;) - person DrColossos; 10.01.2011
comment
@DrColossos Большое спасибо. - person ; 10.01.2011

Просто используйте сопоставления Java для общих типов данных SQL. В этом случае вы можете использовать NUMERIC или DECIMAL.

person Frank Heikens    schedule 10.01.2011
comment
Это работает в PostgreSQL из-за специальной поддержки. Однако сам SQL не определяет числовой тип произвольной точности. В SQL Server максимальная точность составляет 38 цифр. (Надеюсь, значение BigDecimal гарантированно будет в этом диапазоне :-) - person ; 10.01.2011
comment
Вопрос о PostgreSQL, а не о SQL Server. NUMERIC и DECIMAL не имеют ограничений в PostgreSQL: postgresql.org/docs/current /static/datatype-numeric.html - person Frank Heikens; 10.01.2011
comment
Даже PostgreSQL, согласно документации, имеет верхний предел точности в 1000 цифр. Мне никогда не приходилось использовать числа, близкие к таким большим, поэтому я не могу комментировать иначе. (BigDecimal в Java имеет гораздо больший предел.) Дело в том, что числовое пространство меньше, и хотя я не знаю практических причин для его превышения, тот факт, что не следует оставлять без упоминания. - person ; 10.01.2011
comment
@pst: тип данных NUMERIC является стандартом SQL. - person a_horse_with_no_name; 11.01.2011
comment
Я хотел бы увидеть универсальное решение для этого. В настоящее время я храню в виде строки, но это не очень полезно. - person Jus12; 23.10.2014

Я бы использовал decimal, добавив свою собственную шкалу и точность:

t.decimal "price", precision: 12, scale: 4, default: "0.0"
person Anton Semenichenko    schedule 02.09.2020