我使用PHP和MySQL来保存阿拉伯数据。
我的数据库整理是:utf8_general_ci
我的数据库字符集是:utf8
起初我没有在插入之前使用SET NAMES utf8
,因此数据以奇怪的字符插入数据库中,但在我的应用程序中正确显示。使用SET NAMES utf8
后,数据会正确插入,但即使在我的应用程序中,旧数据也不会以阿拉伯字符显示(新数据正常)。
如何更新我的应用程序和MySQL数据库中用阿拉伯字母显示的所有数据?
更新
当我使用mb_detect_encoding
函数检查两个字符串(插入的字符串和我要转换的字符串)的编码时,我得到两个字符串都是UTF-8。
以下是两个字符串的示例:
插入的文字:الإسم بالعربية
我需要转换为الإسم بالعربية
答案 0 :(得分:3)
您遭受“双重编码”。
发生了什么事。
SET NAMES latin1
声称客户端有latin1编码;和CHARACTER SET utf8
。让我们来看看e-acute发生的事情:é
。
C3A9
。SET NAMES latin1
将其视为2个latin1编码的字符 Ã
和©
(hex:C3
和A9
)< / LI>
CHARACTER SET utf8
,因此需要转换这2个字符。
Ã
已转换为utf8(十六进制C383
)和©
(十六进制C2A9
)C383C2A9
)当读回来时,执行了相反的步骤, 并且最终用户可能注意到没有错。出了什么问题:
ORDER BY
可能无法按预期工作。这样的事情会修复你的数据:
UPDATE ... SET col = CONVERT(BINARY(CONVERT(
CONVERT(UNHEX(col) USING utf8)
USING latin1)) USING utf8);
答案 1 :(得分:0)
也许这有用[http://forums.mysql.com/read.php?103,209072,209072
* MySQL论坛上的相同错误和解决方案。 (自2008年起)