Можно ли хранить деньги как десятичные (22,2) в MySQL? - PullRequest
7 голосов
/ 05 марта 2011

Можно ли хранить денежные значения как decimal(22,2) в MySQL? Я пишу веб-сайт и рекламную сеть для виртуального мира.

Ответы [ 4 ]

17 голосов
/ 05 марта 2011

Что если у кого-то есть доллары секстиллиона?!?Поле не может содержать эту огромную кучу бенджаминов ....

Серьезно, SQL Server и PostgreSQL имеют тип данных money, а Access - тип данных валюты.Oracle и MySQL не имеют ни одного.

Этот поток - Лучший тип данных для хранения значений валюты в базе данных MySQL

, однако рекомендует 4 значащих цифры по некоторым причинам, я полагаю, вЕсли вам нужны дробные центы (акции и т. д.).

Если ни один пользователь не может иметь более чем полстиллион долларов (серьезно), и вам не нужно рассчитывать доли центов для хранения, ваш формат должен быть в порядке.

6 голосов
/ 05 марта 2011

Вы должны спросить себя: «Какую сумму денег кто-то получит при использовании моей программы?» и «С какой точностью мне нужны мои десятичные разряды?»

Если вам нужно справиться только с миллиардом, тогда кажется (10,2) будет достаточно. Если вам нужна более высокая точность расчета процентов, возможно, вы захотите (10,5). Если вы просто отслеживаете начисление заработной платы и годовой оклад, кажется, что (7,2) будет достаточно (и я хотел бы быть в 7 части, спасибо!)

Не зная цели ваших данных, трудно на это ответить. Все, что я могу вам дать, это вопросы, которые вы должны себе задать.

2 голосов
/ 12 апреля 2014

Если вы храните деньги в базе данных, вы можете использовать тип int, но хранить в минимальном значении (цент для долларов), а затем просто поделите на 100 при необходимости. Это будет работать быстрее.

0 голосов
/ 11 июня 2018

В принятом ответе @Orbit на этой странице упоминается, что SQL Server имеет тип данных money.

Однако, согласно этому ответу ( Если вы выберете ДЕНЬГИ или ДЕЦИМАЛЬНО (xy) типы данных в SQL Server? ), лучший выбор для хранения денежных значений в SQL Server - decimal(19,4) - который также доступен в MySQL.

Из того, что я понимаю, следует соблюдать осторожность при выполнениивычисления с типом money в SQL Server из-за ошибок округления с плавающей запятой.И в любом случае он может косвенно использовать тип decimal(19,4).

Так что ... тип decimal(22,2) был бы хорош для хранения денежных значений ... Но, как многие, похоже, рекомендуют, decimal(19,4)было бы лучше.

...