我试图将数据库查询导出到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
类型
我不知道你使用的是哪个数据库客户端/驱动程序,但是有像mysql_field_type
-Docs 这样的东西,它会根据它的偏移量给你类型,比如0。
这应该能找出某个列是否需要重新格式化。
重新格式化,number_format
<一口>文档一口>。
使用这些可以自动进行转换。
编辑:关于您的评论:
如果你想映射PHP数据类型,考虑使用MySQL Native Driver -Docs 。与PDO:
一起使用使用mysqlnd for PDO的优点
当使用服务器端预处理语句时,mysqlnd返回本地数据类型,例如,INT列作为整数变量返回,而不是字符串。这意味着更少的内部数据转换。<一口>一口>
所以根据你想要达到的目标,使用正确的工具。
查看从PDO语句获取数据时的多个选项 -Docs .
// French notation
$nombre_format_francais = number_format($number, 2, ',', ' ');
Try
number_format($row[0], 2, ",", ".");
这应该会改变号码的格式。(德国格式)