【发布时间】: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