Хорошо, я знаю, что есть масса статей, в которых говорится, что мне не следует использовать DOUBLE для хранения денег в базе данных MySQL, иначе я получу хитрые ошибки точности. Дело в том, что я не разрабатываю новую базу данных, меня просят найти способ оптимизировать существующую систему. Новая версия содержит 783 столбца с ДВОЙНЫМ типом, большинство из которых используется для хранения денег или формулы для вычисления денежной суммы.
Таким образом, мое первое мнение по этому поводу заключалось в том, что в следующей версии я настоятельно рекомендую преобразование из DOUBLE в DECIMAL, потому что документ MySQL, и все так говорят. Но тогда я не смог найти никаких веских аргументов в пользу этой рекомендации по трем причинам:
Даже при выполнении операций с таблицей из 18 миллионов строк, например SUM и сложные умножения, я не мог выполнить ошибку из-за отсутствия точности. И мы на самом деле не делаем этого на производстве. Я могу показать потерю точности, выполнив что-то вроде
SELECT columnName * 1.000000000000000 FROM tableName;
Но я не могу придумать способ превратить это в ошибку на 2-й десятичной цифре. Большинство реальных проблем, которые я обнаружил в Интернете, - это записи форума 2005 года и более ранние, и я не мог воспроизвести ни одну из них на сервере MySQL 5.0.51.
Так что, пока мы не выполняем никаких арифметических операций SQL, чего мы не планируем делать, есть ли какие-то проблемы, которых следует ожидать от только хранения и получения денежной суммы в столбце DOUBLE?