查询结果中的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