使用 PHP 将 MySQL 转换为 Mongo 的编码问题


Encoding troubles converting MySQL to Mongo with PHP

总的来说,我在使用 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引擎,字符集utf8,排序规则utf8_unicode_ci

  • 不要使用 mysql_* API;更改为 mysqli_*

  • 不要使用任何 mb 或 utf8 编码/解码例程;它们只是隐藏了"正确"的解决方案。

  • 连接到 mysql 后,立即执行SET NAMES utf8

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

éé的莫吉巴克。 它通常表示latin1设置和utf8设置不匹配。

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