В новом проекте, над которым я работаю, у меня есть данные в формате CSV для импорта в таблицу mysql. Одним из столбцов является поле цены, которое хранит валюту в европейском формате, т.е. 345,83. У меня есть сохранение этого десятичного разделителя. В большинстве европейских валют децимальный разделитель «,», но когда я пытаюсь вставить десятичное число в поле (например, 345,83), я получаю следующую ошибку: «Данные усечены для столбца« column_name »в строке« row # «». Если я использую '.' вместо «,» работает отлично. Не могли бы вы помочь мне, как сохранить этот формат в mysql?
вы можете сохранить его как обычное десятичное поле в базе данных и форматировать номер европейского стиля при его отображении
edit: просто добавил пример того, как это может быть достигнуто
$european_numbers = array('123.345,78', '123 456,78', ',78'); foreach($european_numbers as $number) { echo "$number was converted to ".convert_european_to_decimal($number)."\n"; // save in database now } function convert_european_to_decimal($number) { // i am sure there are better was of doing this, but this is nice and simple example $number = str_replace('.', '', $number); // remove fullstop $number = str_replace(' ', '', $number); // remove spaces $number = str_replace(',', '.', $number); // change comma to fullstop return $number; }
Используйте number_format или money_format , это в значительной степени то, что вы предпочитаете.
Это хуже, чем вы думаете. Число 1234.56
может быть написано в Европе как:
В .net парсер чисел может работать в соответствии с определенной культурой, поэтому, если вы знаете формат, который он выполняет для вас. Я уверен, что вы можете найти эквивалент PHP, это сэкономит вам массу неприятностей.
Вы можете импортировать поле валюты в столбец VARCHAR
а затем скопировать этот столбец в столбец DECIMAL
при замене на .
во всех строках с использованием MySQL-манипуляций-функций.
UPDATE <<table>> SET <<decimal-currency-col>> = REPLACE(<<varchar-currency-col>>, ',', '.');
Некоторые типы данных не имеют прямой корреляции между SQL Server или Access и MySQL. Одним из примеров может быть тип данных CURRENCY: MySQL не имеет (пока) тип данных CURRENCY, но создание той же цели служит столбец с определением DECIMAL (19,4). В то время как MSSQL по умолчанию использует типы символов Unicode, такие как nCHAR и nVARCHAR, MySQL не так тесно связывает наборы символов с типами полей, а позволяет использовать один набор типов символов, которые могут быть привязаны к любому набору символов, включая Unicode.
от http://dev.mysql.com/tech-resources/articles/migrating-from-microsoft.html
Вы также можете рассмотреть возможность умножения на 100 и сохранение его как INT.
Прежде чем вставлять цену в БД:
$price = (int)$price*100;
После получения цены от БД:
$price = number_format($price, 2, ',', ' ');
Try replacing the "," with "."? $price = str_replace(",", ".", $price);