【问题标题】:Black diamond question mark character on page when UTF8 header sent发送 UTF8 标头时页面上的黑色菱形问号字符
【发布时间】:2012-10-18 14:33:27
【问题描述】:

我在 MySQL 4.1 服务器上有一个旧数据库,该数据库包含一些用户输入的内容,我已将此数据库复制到新的 MySQL 5 服务器,当我查看打印内容的页面时,我看到黑色菱形中间带问号的字符。这仅在新服务器上显示。

如果我将此页眉添加到页面,菱形不再显示:

header('Content-Type: text/html; charset=iso-8859-1');

如果我取出该标头,则服务器会发送一个如下所示的默认标头,并且菱形会重新出现

内容类型:文本/html;字符集=UTF8

如何在数据库中解决这个问题(例如,对表格进行某种转换),这样我就不必在所有页面中都放置这个标题?

更多信息:我使用 mysqldump 从旧服务器导出数据库,然后使用 CentOS mysql 命令行导入它。我也尝试过使用 phpMyAdmin 导出,但结果相同。

编辑:

查看我的 mysqldump 文件,我可以看到所有 CREATE TABLE 语句都有 charset = Latin1,所以我认为我正在寻找一种以 UTF8 格式导出数据库的方法。我已经尝试将此选项添加到 mysqldump 但它没有任何效果,转储仍然显示 Latin1:

--default-character-set=utf8

【问题讨论】:

  • 这意味着从数据库返回的数据是用 Latin1 编码的,而不是 UTF-8,因此你得到一个编码不匹配。见Handling Unicode Front To Back In A Web App
  • @deceze 我认为你是对的,请参阅我的编辑。有什么办法可以将 Latin1 数据导出为 UTF8?
  • 可能不需要转换您的数据库,您可以简单地告诉连接对象您期望哪个字符集(在进行查询之前)。查看已经给出的答案,或查看here

标签: php mysql utf-8 character-encoding


【解决方案1】:

连接到数据库后尝试设置字符集:

mysql_set_charset("utf8");

【讨论】:

    【解决方案2】:

    Trevor 所说的对我有用,但 Mysqli 除外。

    $mysqli->set_charset("utf8");
    

    【讨论】:

      【解决方案3】:

      连接mysql数据库后使用下面的查询。

      mysql_query("SET NAMES utf8");
      

      希望对您有所帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-04-26
        • 1970-01-01
        • 2013-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多