Я хочу хранить много записей в базе данных MySQL. Все они содержат денежные величины. Но я Дон'т знаю, сколько цифр будет вставлен для каждого из них. Какой тип данных я должен использовать для этой цели? Тип varchar или ИНТ (или других числовых типов данных)?
Поскольку деньги должен получить точное представление Дон'т использовать типы данных, которые являются лишь приблизительными, как плавают
. Вы можете использовать с фиксированной точкой числовой тип данных для этого, как
decimal(15,2)
15
точность (общая длина, включая десятичных знаков)2
- число цифр после десятичной точкиэти типы используются, когда важно сохранить точность, например с денежную данных.
Вы можете использовать десятичное число
или числовой
одинаковы
десятичные и числовые типы хранения точных числовых данных значений. Эти типы используются, когда важно сохранить точность, например с денежных данных. В MySQL, числовые реализуется в виде десятичной, поэтому следующие замечания о десятичной в равной степени применяются к числовым. : СУБД MySQL
т. е. десятичное(10,2)
Я предпочитаю использовать тип bigint, и хранить ценности в счет умножить на 100, так что она станет целым числом.
Например, для обозначения валют значение 93.49
, значение должно быть сохранено как 9349
, во время отображения значения можно разделить на 100 и дисплее. Это будет занимать меньше места для хранения.
предупреждение: В основном, мы не'т проанализировать валюте * умножение валюты, в случае если мы делаем затем разделите результат со 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