用PHP编译将MySQL转换为Mongo的麻烦

时间:2016-01-23 21:18:47

标签: php mysql mongodb encoding utf-8

我一直在PHP / Mongo中遇到很多编码问题。

现在,我正在将一些数据从MySQL转换为Mongo。我有一个包含é的字符串,但当我尝试将其编码为UFT-8(通过mb_convert_encodinguft8_encode)时,它会变为é。我确定其他字符串也包含其他重音字符。

我已经尝试mb_detect_encoding,它告诉我字符串是UTF-8,但是当我mb_check_encoding($string, 'UTF-8')时,它返回false。

基本上,我不知道出了什么问题。这是一个只是PHP脚本的页面,没有HTML。对此问题的任何建议,或者在插入Mongo时通常维护字符编码?

以下是相关脚本:https://plnkr.co/edit/eAkLxfklzLNCsZTBPKsX

MySQL表使用的是MyISAM引擎,charset utf8,collat​​ion utf8_unicode_ci

1 个答案:

答案 0 :(得分:0)

  • 不要使用mysql_ * API;改为mysqli _ *

  • 不要使用任何mb或utf8编码/解码程序;他们只是隐藏“适当的”解决方案。

  • 在连接到mysql之后,执行SET NAMES utf8

  • SHOW CREATE TABLE - 验证表格/列是CHARACTER SET utf8(或utf8mb4)

éé的Mojibake。它通常表示latin1设置和utf8设置不匹配。

如果使用PDO:$db = new PDO('dblib:host=host;dbname=db;charset=UTF8', $user, $pwd); 执行SET NAMES utf8