【问题标题】:PDO MySQL UTF-8: Data read from database not showing correctlyPDO MySQL UTF-8:从数据库读取的数据未正确显示
【发布时间】:2012-10-19 05:45:41
【问题描述】:

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?但是,我在同一本地服务器上运行其他站点没有任何问题。知道我在哪里可以找到正确的方法吗?

【问题讨论】:

  • SET NAMES utf8 已弃用,您已经将其作为字符集参数传递,请尝试不使用该参数。 (但如果它还没有解决您的问题,请不要再次添加)。
  • @hakre:感谢您的帮助,现在可以使用了。您要发布答案以便我接受吗?

标签: php mysql utf-8 pdo


【解决方案1】:

在您的 PDO 连接中:

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

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

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

new PDO(
    "mysql:host=$hostname;dbname=$database;charset=utf8",
    $username, $password
);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 2018-03-29
    • 2020-12-11
    • 1970-01-01
    • 1970-01-01
    • 2012-10-30
    • 1970-01-01
    相关资源
    最近更新 更多