php 5.3 mysql_在升级到PHP 5.3后显示MySQL数据库结果时解决...

问题说明

在将我们的开发服务器上的PHP从5.2升级到5.3之后,我们遇到了一个问题,即在尝试显示俄语字符时,从我们的数据库请求并显示在网页上的数据显示编码不正确.

环境

>开发操作系统:Debian GNU / Linux 6.0

> Dev PHP:5.3.5-0.dotdeb.1

> Live MySQL:Distrib 5.1.49

细节

在PHP 5.3中,用于与MySQL数据库交互的默认客户端库从libmysql更改为mysqlnd,这似乎是我们遇到的问题的原因.

我们使用以下代码连接到数据库:

$conn = mysql_pconnect('database.hostname', 'database_user', 'database_password');

$mysql_select_db('database', $conn);

存储在我们数据库中的数据使用UTF-8编码进行编码.通过命令行客户端连接到数据库并运行查询,确认数据完好无损且编码正确.但是,当我们在PHP中查询数据库并尝试显示完全相同的数据时,它会变得乱码.在这种特定情况下,我们试图显示俄语字符,结果是非英语,非俄语字符:

我们收到的响应标头确认内容类型是UTF-8:

我们在严格模式和mb_check_encoding中使用mb_detect_encoding显示之前测试了字符串,并且在显示之前被告知字符串是UTF-8字符串.我们还使用mysql_client_encoding来测试客户端编码,它还表明字符集是UTF-8.

在进行研究时,我们发现some suggestions试图解决这个问题:

header("Content-type: text/html; charset=utf-8");

mysql_set_charset('utf8');

mysql_query("SET SESSION character_set_results = 'UTF8'");

mysql_query('SET NAMES UTF8', $conn);

utf8_encode($string);

但是,这些解决方案都没有奏效.

用完选项后,我们将开发系统上的MySQL升级到Distrib 5.1.55.在升级之后,当我们连接到开发数据库时,一切都正确显示.当然,当我们连接到我们的实时数据库时,它会继续显示不正确.

理想情况下,我们希望在不升级生产服务器上的MySQL的情况下解决此问题,除非我们可以验证其不起作用的确切原因以及升级为什么要修复它.如何在不升级MySQL的情况下解决此编码问题?或者,为什么MySQL升级修复了这个问题?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值