【问题标题】:PHP interpreting string differently between Postgresql serversPHP在Postgresql服务器之间以不同的方式解释字符串
【发布时间】:2015-06-19 23:53:55
【问题描述】:

我有 php 代码将字符串提交到两个不同服务器上的两个 postgresql 数据库。

字符串是:

'£pound €euro'

PHP 服务器版本:

  • PHP 5.4.36-0+deb7u3
  • Debian Linux 3.2.0-4-amd64

服务器 1 版本:

  • Debian Linux 2.6.32-5-amd64
  • Postgresql:9.1.11

服务器 2 版本:

  • Debian Linux 2.6.32-5-amd64
  • Postgresql:9.1.7

两者的服务器编码都是 UTF8

client_encoding 也是 UTF8

两台服务器的区域设置也相同。

以下代码用于执行查询:

$oConn=@pg_Connect('host=$myip dbname=$mydb user=$myuser password=$mypassword');
$sql = "select * from _myfunction($mystring)"; 
$result=@pg_query($oConn, $sql);

我发现发生的是,当查询被执行时,服务器 1 正在接收以下内容:

select * from _myfunction('£pound €euro')

但在服务器 2 上正在接收以下内容:

select * from _myfunction('£pound �euro')

有没有人知道我在哪里可以找出导致两台服务器之间接收到的查询不同的原因。看到服务器 2 的查询变得时髦,数据库其他部分中的无效字节序列错误导致了问题。

我被难住了。我能看到的唯一区别是 postgresql 的次要版本。

【问题讨论】:

    标签: php linux postgresql encoding


    【解决方案1】:

    我猜你的 postgree 字符集在两台服务器上都不一样。见How can i change database encoding for a PostgreSQL database using sql or phpPgAdmin?,可能对你有帮助

    【讨论】:

    • 感谢您的快速回复。字符集是相同的。它们都是 UTF8。
    • 你检查过 php.ini 是否有相同的字符集吗?见stackoverflow.com/questions/9351694/…
    • 在数据库服务器上? php 代码在数据库的单独服务器上执行。
    • 对不起,我虽然那是两个不同的 php 服务器,你有没有尝试在 pg_connect 上设置字符集?尝试强制字符集,如 $dbconn = pg_connect("host=localhost options='--client_encoding=UTF8'");
    • 是的,我认为这就是我们的解决方案。当从一个 PHP 服务器提交代码时,我无法弄清楚为什么两个相同的(除了次要的 pg 版本)数据库服务器会得到不同的结果,这让我很沮丧。感谢您到目前为止的帮助:)
    猜你喜欢
    • 1970-01-01
    • 2013-11-15
    • 1970-01-01
    • 2014-10-07
    • 2017-04-07
    • 2017-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多