使用PHP将MySQL转换为Mongo时的编码问题
一般来说,我在PHP/Mongo中遇到了很多编码问题 现在,我正在将一些数据从MySQL转换为Mongo。我有一个字符串,其中包含一个使用PHP将MySQL转换为Mongo时的编码问题,php,mysql,mongodb,encoding,utf-8,Php,Mysql,Mongodb,Encoding,Utf 8,一般来说,我在PHP/Mongo中遇到了很多编码问题 现在,我正在将一些数据从MySQL转换为Mongo。我有一个字符串,其中包含一个字符,但当我尝试将其编码为UFT-8时(通过mb\u convert\u encoding,uft8\u encode),它会变成。我确信其他字符串也包含其他重音字符 我尝试了mb\u-detect\u-encoding,它告诉我字符串是UTF-8,但是当我尝试mb\u-check\u-encoding($string,'UTF-8')时,它返回false 基本上
字符,但当我尝试将其编码为UFT-8时(通过mb\u convert\u encoding
,uft8\u encode
),它会变成。我确信其他字符串也包含其他重音字符
我尝试了mb\u-detect\u-encoding
,它告诉我字符串是UTF-8,但是当我尝试mb\u-check\u-encoding($string,'UTF-8')
时,它返回false
基本上,我不知道怎么了。这是在一个网页,只是一个PHP脚本,没有HTML。对于这个问题有什么建议,或者在插入Mongo时一般保持字符编码
下面是有问题的脚本:
MySQL表使用的是MyISAM引擎、字符集utf8、排序规则utf8\uUnicode\uCI
- 不要使用mysql_*API;更改为mysqli_*
- 不要使用任何mb或utf8编码/解码例程;它们只是隐藏了“正确”的解决方案
- 连接到mysql后,立即执行
设置名称utf8
SHOW CREATE TABLE
--验证表/列是否为字符集utf8
(或utf8mb4)
Ã
是é
的代名词。它通常表示latin1
设置和utf8
设置不匹配
如果使用PDO:$db=new PDO('dblib:host=host;dbname=db;charset=UTF8',$user,$pwd)代码>或执行设置名称utf8
你是说它“在一个仅仅是PHP脚本的页面上”,但它仍然被浏览器使用?你检查过你的HTML内容描述符了吗?对不起,我不太清楚你的意思。我确实设置了标题('Content-type:text/plain;charset=utf-8')代码>在顶部。好的,你能给我们看看你的PHP脚本吗?另一个问题可能是Mongo与MySQL的设置方式。添加了脚本和MySQL表设置。与普通文本读取器读取一样,Ã
是正确的UTF编码-任何扩展ASCII字符都会转换为两个字节,而不是一个字节的é
。我不认为MySQL的导出是错误的——它包含正确的UTF-8值。它必须是您的MongoDB导入。我实际上没有看到在PHP脚本中初始化mongo数据库的位置-也许需要在那里显式指定编码参数?我没有使用mysql_*API;使用PDO。我将尝试使用它设置名称utf8。我添加了一个关于PDO的注释。如上所述,所有列都是utf8\U unicode\U ci,所以我明天将在工作中尝试字符集。