4

show variables

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
collation_connection        utf8_general_ci
collation_database          utf8_unicode_ci
collation_server            latin1_swedish_ci

插入的数据是 UTF-8 并在数据库中正确显示,html 标头设置为 utf-8,元标记设置为 utf-8。网站上的所有内容(不是来自数据库)都正确显示),而不是来自数据库的内容。

连接(PDO):

$pdo = new PDO("mysql:host=$hostname;dbname=$database;charset=utf8",$username,$password,array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));

所以,我认为它与输出有关,show variables因为它表明服务器的字符集和排序规则不是 utf-8?但是,我在同一本地服务器上运行其他站点没有任何问题。知道我在哪里可以找到正确的方法吗?

4

1 回答 1

3

在您的 PDO 连接中:

new PDO(
    "mysql:host=$hostname;dbname=$database;charset=utf8",
                                           ############
    $username, $password, array(
        PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"
                                         ##############
    )
);

您正在使用SET NAMES utf8已弃用的 SQL。你不应该再使用它了。实际上,您已经在使用 PDO DSN 字符串中的 charset 参数,这是推荐的方式:charset=utf8.

只需删除SET NAMES utf8init 命令就可以了。

new PDO(
    "mysql:host=$hostname;dbname=$database;charset=utf8",
    $username, $password
);
于 2012-10-29T21:41:35.133 回答