问题:查询结果中的PHP和PostgreSQL标准类型。为什么总是字符串?

使用标准php5-pgsql驱动程序在我看来,至少使用 ubuntu 10.04 上的默认 php 设置,结果值没有映射到标准 php 类型。那是

  • postgresql::integer u003d> php::int

  • postgresql::util u003d> php::float

并将结果值返回为字符串。当系统的语言环境与数据库的语言环境等不一致时,它有时会让人头疼。

是否有可能以某种方式在 php 中获得适当的转换?如果没有,任何关于为什么的见解都将非常受欢迎!

编辑:

PDO 解决了“postresql::integeru003d>php::int”,但不适用于 ex。 “postresql::realu003d>php::float”似乎是因为 PDO 使用了我理解的原生驱动程序 pgsql。就我而言,编码问题不是问题,唯一需要的是准确地映射类型或至少尽可能接近!

$sql = 'SELECT integer_field, numeric_field_10_2 FROM table';
foreach ($dbh->query($sql) as $row) {
    var_dump($row);
}
----------------------------------------
array(4) {
  ["integer_field"]=>int(79)
  ["numeric_field_10_2"]=>string(6) "100.12"
}

谢谢,我。

解答

这是继承自 C API 和 postgres 客户端协议的问题。结果在后端库中作为字符串提供。兼容编码应该不是问题,但你是对的,这可能是一个问题。

您可以使用手动转换,或信任 php 中的自动转换,但真正的问题只是正确设置编码。您可以在每个数据库或每个集群的基础上设置 postgres 的编码,我个人建议使用 UTF-8。

转换现有数据库非常麻烦,它通常涉及完全转储和完全导入到新数据库中。

pg_client_encoding 会告诉你当前的 postgres 编码,但对 php 编码没有帮助。如果您不能使用兼容的编码,也许值得创建一个使用 iconv 来转换字符串数据的包装器。

最后,您可以使用替代客户端库。我相信用于 php 的 PDO postgres 库可以更好地处理这个问题。

http://us.php.net/manual/en/book.pdo.php

Logo

PostgreSQL社区为您提供最前沿的新闻资讯和知识内容

更多推荐