使用标准的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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。