Как правильно изменить десятичный разделитель в выходных данных в MySQL - PHP Combo - PullRequest
1 голос
/ 30 декабря 2011

Я пытался экспортировать запрос к базе данных в CSV, и возникла необходимость использовать другую десятичную запятую. Кажется невозможным изменить десятичную запятую в MySQL , поэтому я попытался в PHP:

setlocale(LC_NUMERIC, "cs_CZ");

Но похоже, что все функции базы данных, такие как mysql_fetch_row и mysql_fetch_assoc, получаютданные типа string вместо double:

$res = mysql_query("select 50/3");
$row = mysql_fetch_row($res);
var_dump($row); // $row[0] is of type "string"

Таким образом, в общем случае в PHP уже нет данных типа double, а есть только строки!

Так есть ли какой-нибудь общий, чистый способ указать выходные данные десятичной точки?

Я закончил преобразование строк, используя str_replace('.', ',', $row[0]), но это ужасно по двум причинам:

  • Вы должны знать, какое поле имеет тип double
  • Это грязное задание.

Ответы [ 3 ]

3 голосов
/ 30 декабря 2011

Я не знаю, какой клиент / драйвер базы данных вы используете, но есть что-то вроде mysql_field_type & shy; Docs , которое дает вам тип, основанный на его смещении, например 0.

Это должно помочь определить, нужно ли переформатировать определенный столбец или нет.

Для переформатирования существует number_format & Docs * Документы .

С их помощью вы можете сделать преобразование автоматически.


Редактировать: По поводу ваших комментариев:

Если вы хотите отобразить типы данных PHP, попробуйте использовать собственный драйвер MySQL & shy; Docs . Используйте его вместе с PDO:

Преимущества использования mysqlnd для PDO

mysqlnd возвращает собственные типы данных при использовании подготовленных операторов на стороне сервера, например, столбец INT возвращается как целочисленная переменная, а не как строка. Это означает меньше преобразований данных внутри. Источник

Поэтому, в зависимости от того, чего вы пытаетесь достичь, используйте правильный инструмент.

См. Также несколько вариантов, которые есть у вас при получении данных из оператора PDO & shy; Docs .

2 голосов
/ 30 декабря 2011
// French notation
$nombre_format_francais = number_format($number, 2, ',', ' ');
0 голосов
/ 30 декабря 2011

Попробуйте

number_format($row[0], 2, ",", ".");

Это должно изменить формат номера. (немецкий формат)

...