在使用PHP将MySQL转换为Mongo时遇到了编码问题。
在使用PHP将MySQL转换为Mongo时遇到了编码问题。
我在使用PHP/Mongo时遇到了许多编码问题。
目前,我正在将一些数据从MySQL转换到Mongo。我有一个包含é
的字符串,但是当我尝试将其编码为UTF-8(通过mb_convert_encoding
,uft8_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转换为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,所以明天在工作时他将尝试使用字符集来解决问题。