Ваш первый инстинкт верен: преобразуйте «необычный» (запятая-десятичный) ввод в стандартный формат, который MySQL используется по умолчанию (точка-десятичное число) в первой точке, где вы его получите.
существует множество способов написания чисел
Будьте осторожны, хотя вас не укусят люди, использующие запятые в качестве разделителей тысяч, например "3,203,907.23" или европейскую форму "3.203.907 , 23 ", швейцарский" 3'203'907,23 'или даже эта форма, которая широко используется в Индии: "32,03,907.71" (да, я хотел набрать там только две цифры!)
Чтобы упростить вашу жизнь, правило для валют относительно простое:
- , где за точкой или запятой следуют только две цифры в конце строки, этот символ действует как десятичная дробь разделитель.
После того, как вы узнаете, что является десятичным разделителем, вы можете безопасно удалить все остальные нецифровые символы из строки, измените найденный десятичный разделитель на .
, а затем используйте любую стандартную библиотечную строку- преобразование в число.
Формат хранения не является форматом представления
Да, вы можете указать MySQL использовать запятую в качестве десятичного разделителя, но это нарушит большую часть вашего кода - в том числе Определите части фреймворка, которые читают из базы данных и ожидают десятичные числа - что вы пожалеете, что сделали это очень быстро ...
Здесь действует общий принцип: вы должны выполнить хранение и обработка данных в формате, который прост в обработке, взаимозаменяем с другими системами и понятен другим разработчикам программного обеспечения.
Подумайте, что произойдет, если вам потребуется разрешить другой структуре доступ к вашей базе данных MySQL для генерации отчетов ... Кто бы ни разрабатывал это программное обеспечение (и это может быть вы), будет рад, что все цифры сохранены номера всегда хранятся в базах данных.
Преобразование при входе, повторное преобразование при выходе
Если необходимо принять ввод в другом формате, преобразуйте этот ввод в ваш стандартизированный формат как можно раньше.
Когда вам нужно использовать выходной формат, выполните преобразование в этот формат как можно позже.
Идея состоит в том, чтобы сохранить как можно больше ваших Система "исключительная", насколько это возможно. Программист, который должен помнить, какой формат нумерации c будет действовать в момент вызова данного метода, не является счастливым программистом.
PS
Опция, о которой вы говорите в MySQL приведен пример этого шаблона: он не меняет того, как хранятся данные c. Все, что меняется, это то, как вы передаете числа в MySQL и как они возвращают их вам.