在使用PHP将MySQL转换为Mongo时遇到了编码问题。

14 浏览
0 Comments

在使用PHP将MySQL转换为Mongo时遇到了编码问题。

我在使用PHP/Mongo时遇到了许多编码问题。

目前,我正在将一些数据从MySQL转换到Mongo。我有一个包含é的字符串,但是当我尝试将其编码为UTF-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。

0
0 Comments

在将MySQL转换为MongoDB的过程中出现了编码问题,以下是问题的原因和解决方法。

问题的原因:

1. 不要使用mysql_* API,改用mysqli_* API。

2. 不要使用任何mb或utf8编码/解码函数,它们只是隐藏了“正确”的解决方案。

3. 在连接到MySQL后,执行SET NAMES utf8命令。

4. 使用SHOW CREATE TABLE命令验证表和列是否使用了CHARACTER SET utf8(或utf8mb4)设置。

5. 当出现Ã时,通常表示latin1设置和utf8设置不匹配。

解决方法:

如果使用PDO:

$db = new PDO('dblib:host=host;dbname=db;charset=UTF8', $user, $pwd);

或者执行SET NAMES utf8命令。

还有使用PDO,并补充了关于PDO的注意事项。

另外,作者指出所有的列都是utf8_unicode_ci,所以明天在工作时他将尝试使用字符集来解决问题。

0