За последние 24 часа нас посетили 22645 программистов и 1209 роботов. Сейчас ищут 753 программиста ...

В каком типе вы храните денежные величины в MySQL?

Тема в разделе "PHP для новичков", создана пользователем Konstant1n, 25 фев 2020.

  1. Konstant1n

    Konstant1n Активный пользователь

    С нами с:
    14 авг 2017
    Сообщения:
    273
    Симпатии:
    1
    Адрес:
    Волгоград
    Всем привет!
    В каком типе правильнее будет хранить денежные велечины в MySQL?
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    decimal с нужной точностью. В гугле чуть больше миллиона ответов на этот вопрос)
     
  3. Maple White

    Maple White Новичок

    С нами с:
    8 янв 2020
    Сообщения:
    3
    Симпатии:
    0
    Обычное дело - хранить в копейках, т.е. как целое число. Про это и Дядя Боб пишет и Фаулер и вот в видео:
     
  4. Konstant1n

    Konstant1n Активный пользователь

    С нами с:
    14 авг 2017
    Сообщения:
    273
    Симпатии:
    1
    Адрес:
    Волгоград
    а если как строку?
     
  5. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    Смотрю курс от Povilas Korop, он использует копейки в INTEGER. Я верю в этого чувака!
    На самом деле конечно DECIMAL вот прямо для этого. В некоторых диалектах SQL у него есть синоним MONEY и CURRENCY.

    НОБЛЯ! проблема не в SQL, а в PHP который эти данные получит и будет считать как float.
     
  6. Konstant1n

    Konstant1n Активный пользователь

    С нами с:
    14 авг 2017
    Сообщения:
    273
    Симпатии:
    1
    Адрес:
    Волгоград
    но, чтобы хранить флоат в децимал, необходимо еще рядом и хранить множитель? например 435,3679 записать как 3453679 и рядом множитель 10000
     
  7. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.794
    Симпатии:
    650
    Обычно в копейках. Правда, это не я придумал.
     
  8. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    @Konstant1n, DECIMAL может содержать десятичные числа заданной точности.
     
    Konstant1n нравится это.
  9. twim32

    twim32 Активный пользователь

    С нами с:
    29 мар 2017
    Сообщения:
    275
    Симпатии:
    58
    На одном из sql форумов читал про то, что желательно хранить цены не в формате x.xx, а в x.xxxx. Проблемы возникают когда узнаём стоимость n-количества товара и округляя мы получаем лишние копейки.
     
    Konstant1n нравится это.
  10. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.794
    Симпатии:
    650
    Кстати, в decimal тоже можно хранить в копейках. У него диапазон больше.
     
    Konstant1n нравится это.
  11. acho

    acho Активный пользователь

    С нами с:
    28 дек 2016
    Сообщения:
    854
    Симпатии:
    210
    Адрес:
    Санкт-Петербург
    За всех не скажу, но на текущем проекте лично я использую decimal(10,4)
     
    Konstant1n нравится это.
  12. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    GAAP Compliance is required or you need 4 decimal places:
    DECIMAL(13, 4)
    --- Добавлено ---
    Но это оставляет открытым вопрос об адекватном представлении в PHP. Потому что если ты заберешь этот decimal в свой скрипт и будешь с ним работать как с числом, он будет интерпретироваться как float и тут пойдут косяки.

    PHP не поддерживает фиксированную точность кроме как в целых числах. Есть вариант использовать математику для больших чисел (BCMath)
    --- Добавлено ---
    Ну или не умничать и всегда хранить и считать как число копеек. Только при выводе на страницу делить на сто и форматироватьна два знака после запятой. Не при вычислениях, только при выводе!
     
    Konstant1n нравится это.