4

我希望 MySQL 中的所有数据都是 UTF8 编码的。我已将数据库、表和列的所有字符集和排序规则设置为 UTF8。在将任何内容写入数据库之前,我在 PHP 中使用 mb_detect_encoding 来检查它是否为 UTF8。因此,我相信所有数据都是 UTF8 编码的。

但是,问题出在这里:以 Ríkarðsdóttir 这个词为例,当从数据库中查询并通过 PHP 在 UTF8 编码的网页上显示时,它会正确显示。如果我通过 phpMyAdmin 查询相同的记录,我会得到 RÃkarðsdóttir。如果我使用 MySQL 命令行也是如此。

Running SHOW VARIABLES returns to me:
character_set_client    utf8,
character_set_connection    utf8,
character_set_database  utf8,
character_set_filesystem    binary,
character_set_results   utf8,
character_set_server    latin1,
character_set_system    utf8

只有服务器是 latin1,我在一个共享托管站点上,不相信我可以改变它。这可能是问题吗?

这是我不明白的:为什么我的 UTF8 网页正确显示 Ríkarðsdóttir,但 UTF8 编码的 phpMyAdmin 网页显示为 RÃkarðsdóttir?数据不是真正的 UTF8 编码还是数据库不相信它是?需要做什么来纠正这个问题?

4

1 回答 1

3

尝试连接后立即运行此查询:

SET NAMES UTF8

您的数据库需要将数据存储为 UTF8,并且您的网页标题也应该有一个 UTF8 声明,但是您与数据库的连接也需要使用 UTF8。您可以在命令行和/或通过 PHPMyAdmin 运行它。该“查询”之后的所有通信都将采用 UTF8 编码。

于 2011-08-22T01:41:19.940 回答