从 5.4 移动到 5.3 时的 Cakephp MySQL 编码问题


cakephp mysql encoding issue when move from 5.4 to 5.3

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

例子 : 保苏吉吉姆·特里

·

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

Bệnh suy giảm trà nhớ

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

平苏吉

吉姆三

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

但是当我移动到带有php 5.3.23的主机时,它显示在网站上,就像在数据库上一样:

Bệnh suy giảm trà nhớ

和 api 响应:B''u00e1''u00bb''

u2021nh suy gi''u00e1''u00ba''u00a3m tr''u00c3''u00ad nh''u00e1''u00bb''u203a 它是dislayed : Bệnh suy giảm trã nhá»› 在移动设备上(如果我使用 php5.4,则完美显示 对于 API)

;

然后我尝试在从数据库中获取 php 后使用它utf8_decode函数,结果如下:

utf8_decode($record);
B ?nh

suy giảm trí 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 collate utf8_unicode_ci');....我还设置了标题的字符集,html元标记....

我的数据库在两种环境中都使用utf8_unicode_ci排序规则数据库版本无异只是我找不到解决问题的方法,所以如果有人知道这一点,请给我一些解决方案谢谢

问题是:我在 php5.3 托管环境中设置了编码 = utf8,但在 php5.4(开发环境)中我对其进行了注释,因此当我将数据库从开发环境移动到产品环境时,会出现此问题。只需在 2 env 的数据库配置中设置相同的编码选项,代码即可完美运行