PHP: MySql Тип данных для денежных значений - PullRequest
2 голосов
/ 21 октября 2010

Как лучше всего хранить денежные значения в MySql.

Я видел это: десятичное число (5,2)

, но вы не можете ввести сумму более $ 999,99. Я имею в виду, я знаю, что вы можете изменить 5 на что-то другое, но это не самый подходящий способ сделать это ... но опять же я не уверен, что именно поэтому я публикую.

Я также видел сохранение суммы как неподписанного целого числа тоже. Так какой же самый эффективный способ хранения денежных ценностей?

Ответы [ 4 ]

4 голосов
/ 21 октября 2010

Какую стоимость валюты вы ожидаете хранить?DECIMAL(15,2) будет обрабатывать то, что большинство бросит на него.

Я также видел хранение суммы в виде беззнакового целого.

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

1 голос
/ 03 февраля 2011

А как насчет валюты? Если вы хотите поддерживать распределенных клиентов в нескольких локалях, вам нужно будет вставить валюту / локаль каждого денежного значения. Как другие БД справляются с этим?

Для значений со знаком со целым числом решение о том, что является «минимальным значением процента», является бизнес-решением (вас волнует 0,001c? также важно при расчете процентов на низкие значения, например). Если с 0,001c все в порядке, умножьте все значения на 1000 при записи в таблицу, разделите на 1000 при обратном чтении ...

1 голос
/ 21 октября 2010

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

0 голосов
/ 21 октября 2010

Почему бы не сохранить значение в минимально возможной единице и позволить вашему сценарию выполнить преобразование в обычное представление?

Таким образом, вы можете сохранить значение как целое число.

...