10.7Kпросмотров
98.4%от подписчиков
4 сентября 2025 г.
📷 ФотоScore: 11.8K
Деньги в MySQL: DECIMAL против FLOAT 💸 ❗️Почему это важно В финансах «копейка рубль бережёт»: ошибка 0.01 в одной транзакции, умноженная на тысячи строк, ломает отчёты и бухгалтерию. Главный выбор — где хранить деньги: в DECIMAL или FLOAT? 1️⃣ Короткий ответ 🔹 Для сумм, цен, налогов — используйте DECIMAL(precision, scale). 🔹FLOAT/DOUBLE — приблизительные числа (двойичные), для денег не подходят. 2️⃣ Что такое DECIMAL и FLOAT? 🔹 DECIMAL(p, s) — точные десятичные числа. Хранит каждую цифру (до 65 знаков, обычно s=2 или 4). 🔹 FLOAT/DOUBLE — числа с плавающей запятой в двоичной форме (IEEE 754). Быстрые, но дают «хвосты» 0.1000000000001. Пример проблемы с FLOAT: CREATE TEMPORARY TABLE t_f (a FLOAT, b FLOAT); INSERT INTO t_f VALUES (0.1, 0.2); SELECT a + b AS sum_val FROM t_f; -- sum_val может быть 0.3000000119... Так же, но с DECIMAL: CREATE TEMPORARY TABLE t_d (a DECIMAL(10,2), b DECIMAL(10,2)); INSERT INTO t_d VALUES (0.10, 0.20); SELECT a + b AS sum_val FROM t_d; -- sum_val = 0.30 3️⃣ Как выбрать размер DECIMAL Типовой набор: 🔹DECIMAL(19,4) — для сумм и цен (4 знака после запятой хватает для НДС/комиссий). 🔹DECIMAL(10,2) — для розничных цен в «валютах с 2 знаками». 4️⃣ Альтернатива: хранить в «копейках» Иногда суммы хранят как INT в минимальных единицах (центы/копейки). Плюсы: быстрые индексы, чёткие сравнения. Минусы: нужна дисциплина преобразований (делить/умножать на 100), разные валюты ≠ одинаковая точность. 5️⃣ Мини-резюме 🔹 Для денег — только DECIMAL (или INT в минимальных единицах). 🔹 Выберите подходящую точность (часто DECIMAL(19,4)). 🔹 Не складывайте «яблоки и апельсины»: валюты и точности должны быть явными.
10.7K
просмотров
1665
символов
Нет
эмодзи
Да
медиа

Другие посты @sqlacademyofficial

Все посты канала →