如何将♥☆等字符存储到DB?

时间:2010-06-10 16:37:30

标签: php mysql utf-8 character-encoding latin1

上一期 - 无法存储非英文字符:

How to store non-english characters?

使用UTF8修复了这个问题。但今天意识到像♥☆这样的符号没有正确存储。它们会转换为♥☆等字符。

如何解决这个问题?

2 个答案:

答案 0 :(得分:12)

在我看来,他们正确地存储了,但是当你把它们读出来时,你并没有正确地解释它们。 将以UTF-8编码的多字节字符结尾。我敢打赌,如果你查看多字节编码,你会发现它分别与♥☆的单字节编码相同。

编辑:添加详细信息。

正如您在下表中所看到的,将UTF-8字符解释为将它们编码为Windows Latin-1,就可以得到您所看到的结果。

UTF-8 character      Hex
♥                    e2 99 a5
☆                    e2 98 86

Windows Latin-1      Hex
â                    e2
™                    99
¥                    a5
˜                    98
†                    86

答案 1 :(得分:2)

UTF8是否在整个范围内使用一致(MySQL,PHP,Apache,< meta> s,header ..)?

对我来说,这开箱即用:

$query = "update tbl set col = '♥☆' where id = 1";
mysql_query($query) or die(mysql_error());
$query = "select col from tbl where id = 1";
$res = mysql_query($query) or die(mysql_error());
print_r(mysql_fetch_row($res));

调试输出:

Content-type: text/html; charset=utf-8
Array
(
    [0] => ♥☆
)