cakephp mysql编码问题从5.4移动到5.3

时间:2015-01-06 02:56:57

标签: php mysql cakephp pdo utf-8

我有一个使用CakePHP在PHP 5.4.35中开发的项目,当我将一些unicode字符串插入数据库时​​,

  

示例:Bệnhsuygiảmtrínhớ

插入数据库后,这是记录的数据库内容:

  

BệnhsuygiảtrÃnhá»>

如果我使用php 5.4,它在网站上完美显示:

  

Bệnhsuygiảmtrínhớ

我还为这个项目开发了json格式的api,当我得到这些数据时api响应是: B \ u1ec7nh suy gi \ u1ea3m tr \ u00ed nh \ u1edb 当客户端(移动客户端)获取此数据并显示时,它显示与网站完全相同。

但是当我转移到使用php 5.3.23的托管时,它就像在数据库上一样显示在网站上:

  

BệnhsuygiảtrÃnhá»>

     

和api回应:B \ u00e1 \ u00bn \ u2021nh suy gi \ u00e1 \ u00ba \ u00a3m   它是公开的:Bệnhsuygiảm   trÃnhá»>在移动设备上(如果我使用php5.4,它会完美显示)   for api)

然后我尝试从数据库获取它后使用php的utf8_decode函数,这是结果:

utf8_decode($record);
  

B ?nhsuygiảmtrính ?

我认为也许这个字符串在插入到php5.4中的mysql之前编码,然后在从数据库中获取后立即解码,但在php5.3中它保留字符串插入并从数据库获取。而编码器,php 5.3和5.4中utf8的解码器是不同的???我猜。

我正在使用cakephp 2.5.3并且它使用PDO从数据库插入和获取数据 我已经尝试过一直改变字符集,整理....但它不会像以下那样影响: PDO - > exec('SET names utf8'),PDO - > exec('Set names utf8 collat​​e utf8_unicode_ci'); .... 我还设置了header,html元标记的字符集....

我的数据库在两个环境中都使用utf8_unicode_ci collat​​ion 数据库版本没什么不同 只是我找不到解决问题的方法,所以如果有人知道这个,请给我一些解决方案 感谢

1 个答案:

答案 0 :(得分:0)

问题是:我在php5.3托管环境中设置encoding = utf8,但是在php5.4(开发环境)中我评论过它,因此当我将数据库从开发环境移动到产品环境时,就会出现这个问题。 只需在2 env中的数据库配置中设置相同的Encoding选项,代码就可以正常工作