Какой тип данных SQL является лучшим для значений валют? Я использую MySQL, но предпочел бы независимый от базы данных тип.
mysql
sql
sqldatatypes
Брайан Фишер
источник
источник
Ответы:
Нечто подобное
Decimal(19,4)
обычно работает довольно хорошо в большинстве случаев. Вы можете отрегулировать масштаб и точность, чтобы соответствовать потребностям чисел, которые вам нужно хранить. Даже в SQL Server я не использую "money
", поскольку это нестандартно.источник
(19,4)
вместо(19,2)
?Единственное, на что вам следует обратить внимание - если вы переходите с одной базы данных на другую, вы можете обнаружить, что DECIMAL (19,4) и DECIMAL (19,4) означают разные вещи.
( http://dev.mysql.com/doc/refman/5.1/en/precision-math-decimal-changes.html )
источник
Также важно определить, сколько десятичных знаков может потребоваться для ваших расчетов.
Я работал над приложением цены акций, которое требовало расчета цены одного миллиона акций. Указанная цена акции должна была храниться с точностью до 7 цифр.
источник
Ответ Асафа о
звучит легкомысленно, но на самом деле это уместно.
Только сегодня у нас возникла проблема, из-за которой запись не удалось вставить в нашу таблицу тарифов, потому что для одного из столбцов (GrossRate) установлено значение Десятичное число (11,4), а наш отдел продуктов только что получил контракт на номера в каком-то удивительном курорте. в Бора-Бора, которые продают за несколько миллионов тихоокеанских франков за ночь ... что никогда не было предвзятым при разработке схемы базы данных 10 лет назад.
источник
Для бухгалтерских приложений очень распространено хранить значения как целые числа (некоторые даже заходят так далеко, что говорят, что это единственный способ). Чтобы получить представление, возьмите сумму транзакций (предположим, $ 100,23) и умножьте ее на 100, 1000, 10000 и т. Д., Чтобы получить необходимую точность. Так что если вам нужно только хранить центы и можно безопасно округлять в большую или меньшую сторону, просто умножьте на 100. В моем примере это будет 10023 как целое число для хранения. Вы сэкономите место в базе данных, и сравнение двух целых чисел будет намного проще, чем сравнение двух чисел с плавающей запятой. Мои $ 0,02.
источник
DECIMAL
? Вы должны быть очень осторожны с тем, чтобы всегда переводить пенни, мельницы или миллионы в доллары в подходящее время.супер поздняя запись, но GAAP - хорошее эмпирическое правило
Источник: Лучший тип данных для хранения денежной стоимости в MySQL
источник
Вы можете использовать что-то вроде
DECIMAL(19,2)
по умолчанию для всех ваших денежных значений, но если вы когда-либо будете хранить значения ниже 1000 долларов, это будет пустой тратой ценного пространства базы данных.Для большинства реализаций
DECIMAL(N,2)
было бы достаточно, если значениеN
равно как минимум количеству цифр перед.
самой большой суммой, которую вы когда-либо ожидали сохранить в этом поле+ 5
. Поэтому, если вы никогда не ожидаете хранить какие-либо значения, превышающие 999999,99, ихDECIMAL(11,2)
должно быть более чем достаточно (пока не изменится ожидание).Если вы хотите быть совместимыми с GAAP , вы можете пойти дальше
DECIMAL(N,4)
, где значениеN
равно как минимум количеству цифр перед.
самой большой суммой, которую вы когда-либо ожидали сохранить в этом поле+ 7
.источник
Это зависит от характера данных. Вы должны обдумать это заранее.
Мое дело
Почему (М, 4)?
Компромисс
Совместимый Экстрим
Хотя MySQL позволяет вам использовать десятичную (65,30), 31 для масштаба и 30 для точности кажутся нашими ограничениями, если мы хотим оставить опцию передачи открытой.
Максимальный масштаб и точность в наиболее распространенных СУБД:
6 , 7 , 8 , 9
Разумный Экстрим
Мы склонны говорить: «Да, конечно ... Мне не нужны эти сумасшедшие цифры». Ну, зимбабвийцы тоже так говорили. Не так давно
Давайте представим, что вам нужно записать транзакцию в 1 млн долларов в зимбабвийских долларах (может быть, вряд ли сегодня, но кто знает, как это будет выглядеть через 10 лет?).
источник
Хотя это может быть поздно, но это будет полезно для кого-то еще. Из моего опыта и исследований я узнал и принял десятичное число (19, 6). Это при работе с php и mysql. при работе с большой суммой денег и курсом обмена
источник