Дополнительно
Лучший тип данных для хранения денежных значений в MySQL
Я хочу хранить много записей в базе данных MySQL. Все они содержат денежные величины. Но я Дон'т знаю, сколько цифр будет вставлен для каждого из них. Какой тип данных я должен использовать для этой цели? Тип varchar или ИНТ (или других числовых типов данных)?
259
12
Поскольку деньги должен получить точное представление Дон'т использовать типы данных, которые являются лишь приблизительными, как
плавают
. Вы можете использовать с фиксированной точкой числовой тип данных для этого, как15
точность (общая длина, включая десятичных знаков)2
- число цифр после десятичной точкиСм. 1SQL Для Числовых Типов1:
Вы можете использовать
десятичное число
иличисловой
одинаковыт. е.
десятичное(10,2)
Читать
Я предпочитаю использовать тип bigint, и хранить ценности в счет умножить на 100, так что она станет целым числом.
Например, для обозначения валют значение
93.49
, значение должно быть сохранено как9349
, во время отображения значения можно разделить на 100 и дисплее. Это будет занимать меньше места для хранения.Это зависит от ваших потребностей.
Используя десятичное(10,2) обычно достаточно, но если вам нужно немного более точные значения вы можете установить
десятичное число(10,4)
.Если вы работаете с большими значениями заменить
10
с19
.Если ваше приложение должно обрабатывать денежные значения до триллиона, то это должно работать: 13,2 Если вам необходимо обеспечить соответствие с GAAP (общепринятые принципы бухгалтерского учета), а затем использовать: 13,4
Обычно сумма Ваших денег значения в 13,4 до округления на выходе до 13,2.
Действительно, это зависит от программиста'ы предпочтения. Я лично использую:
числовые(15,4)
, чтобы соответствовать общепринятые принципы бухгалтерского учета (ОПБУ).Мы используем
двойной
.вздох
Почему?
Потому что он может представлять любой 15 значный номер , не имеющий ограничений по Где десятичная точка. Все за жалкие 8 байт!
Поэтому он может представлять:
0.123456789012345
123456789012345.0
...и что-нибудь между ними.
Это полезно, потому что мы'повторно дело с мировые валюты, и
двойной
может хранить различное количество десятичных знаков мы'МР скорее всего, столкнетесь.Один "двойной" поле может представлять 999,999,999,999,999 в японских иенах, 9,999,999,999,999.99 С в долларах США, и даже 9,999,999.99999999 s в биткоины
Если вы попробуете сделать то же самое с
десятичное число
, нужно `десятичное число(30, 15), по которым стоит 14 байт.# Предупреждения#
Конечно, с помощью "двойной" Это'т без предупреждения.
Однако, он's не потери точности, так как некоторые склонны указать. Хотя "двойной" может не быть внутренне точно к основанию 10, мы можем сделать его точно по округление значения дергаем из базы данных значительных знаков после запятой. Если нужно то есть. (например, если это's будет выводиться, и основание 10 представление не требуется.)
Предостережения находитесь, в любое время мы выполнять арифметические операции с ней, нужна для нормализации результата (округлив его до значимых десятичных разрядов), до:
Еще какой нюанс есть, в отличие от
десятичное число(м, д), где база данных программы не вводя ряд с более " м " цифр, нет таких проверок существует с
двойной`. Программа может вставить введенное пользователем значение из 20 цифр, и это'll в конечном итоге молча записан как неточные суммы.Попробуйте использовать
это правило работает и с любой другой БД, а также
В то время этот вопрос был задан, никто не думал о Bitcoin цене. В случае с БТД, то, вероятно, недостаточно для использования в <код>В десятичное число(15,2)</код>. Если биткоин вырастет до $100.000 или более, то нужно, по крайней мере, в <код>в десятичной(18,9) в< код> В поддержку криптовалюты в наших программах.
в <код>в десятичной(18,9)</код> занимает 12 байт пространства в MySQL (4 байта на 9 цифр).
Хранение денег как значение типа bigint`, умноженное на 100 или больше причин, чтобы использовать меньше места для хранения нет смысла во всех "нормальных" и ситуациях.
десятичное число
.типа
.При необходимости соответствия ОПБУ или вам нужно 4 знака после запятой:
Десятичной(13, 4) Который поддерживает максимальное значение:
$999,999,999.9999
В противном случае, если 2 знака после запятой достаточно: Типа decimal(13,2)
СРЦ: https://rietta.com/blog/best-data-types-for-currencymoney-in/
10000 умножает и хранит как значение типа bigint, как назальный валюты; в Visual Basic и офиса. См https://msdn.microsoft.com/en-us/library/office/gg264338.aspx