1

我试图将数据库查询导出到 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 已经没有 type 的数据double,而只有字符串!

那么是否有一些通用的、干净的方法来指定小数点的输出?

我最终使用转换了字符串,str_replace('.', ',', $row[0])但这很丑陋,原因有两个:

  • 你必须知道哪个字段是类型double
  • 这是一个肮脏的字符串工作。
4

3 回答 3

3

我不知道您使用的是哪个数据库客户端/驱动程序,但是有类似mysql_field_typeDocs的东西可以根据它的偏移量为您提供类型,例如 0。

这应该可以确定某个列是否需要重新格式化。

要重新格式化,有number_formatDocs

有了这些,您可以自动进行转换。


编辑:关于您的评论:

如果您想要映射 PHP 数据类型,请考虑使用MySQL Native Driver Docs 。与 PDO 一起使用:

使用 mysqlnd 进行 PDO 的优势

mysqlnd 在使用服务器端准备语句时返回本机数据类型,例如,INT 列作为整数变量而不是字符串返回。这意味着内部的数据转换更少。来源

因此,根据您尝试实现的目标,使用正确的工具。

还可以查看从 PDO Statement Docs 获取数据时的多个选项

于 2011-12-29T21:03:57.427 回答
2
// French notation
$nombre_format_francais = number_format($number, 2, ',', ' ');
于 2011-12-29T21:01:18.477 回答
0

尝试

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

那应该改变数字的格式。(德语格式)

于 2011-12-29T21:02:06.337 回答