数据库
首页 > 数据库> > 查询结果中的PHP和PostgreSQL标准类型.为什么总是字符串?

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

作者:互联网

使用标准的php5-pgsql驱动程序,结果是,至少使用ubuntu 10.04上的默认php设置,结果值未映射到标准php类型.那是

> postresql :: integer =>的PHP :: INT
> postresql :: real => php :: float
>等

并返回要转换为字符串的结果值.当系统的语言环境与数据库的语言环境不一致时,有时会引起很多麻烦.

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

编辑:

PDO解决了“ postresql :: integer => php :: int”问题,但不适用于ex. “ postresql :: real => 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

标签:postgresql,casting,php
来源: https://codeday.me/bug/20191201/2083883.html