【问题标题】:imported database dump from latin1 db to utf8 database从 latin1 db 导入数据库转储到 utf8 数据库
【发布时间】:2010-03-01 16:21:16
【问题描述】:

当我从 mysql v4.0.21 对数据库进行 mysql 转储并将其导入新服务器时,我使用 iconvlatin1 转换为 utf8 mysql v5.0.45

在旧服务器上是 latin1,在新服务器上是 utf8,所以我在 mysql 转储上运行了这个:iconv −f latin1 −t UTF−8 quickwebcms_2010-03-01.sql

它运行成功,然后我将它导入到新服务器上。

现在,当它打印出我的 PHP 应用程序中的一些数据时,它会显示问号 (?)(例如:College?s)和Â(例如:CollegeÂ’s)。

我导出了这些字符出现的表格,并在 textmate 中进行了查找和替换,然后将其导入新数据库并将某些字段上传为空,因此查找和替换可能会搞砸一些事情进行中。我将表格 csv 保存为 utf8 no bom,只是 utf8,它仍然做同样的事情。

感谢任何关于为什么会发生这种情况的帮助。

【问题讨论】:

标签: php mysql encoding


【解决方案1】:

如果您的表格内容都正常(并且采用 UTF-8 格式)并且您的 Web 应用程序中仍有“坏”字符,请确保您的 MySQL 连接在您的 PHP 脚本中使用 UTF-8 字符集。即使您的数据库和表是 UTF-8 格式,MySQL 默认使用 latin1 连接(至少在我的共享服务器配置中)。所以你必须告诉 MySQL 以 UTF-8 格式发送内容。否则,它会即时将其转换为 latin1,从而在 UTF-8 网页中产生“坏”字符。

如果可用,请使用mysql_set_charset,否则您可以使用 SQL 查询设置它(如果可用,请始终使用 mysql_set_charset):

if (function_exists('mysql_set_charset'))
    mysql_set_charset('utf8', $conn);
else
{
    if (mysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'", $conn) === false)
    {
        //Error! Do something...
    }
}

还要确保您的 (X)HTML 标记也使用 UTF-8:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

【讨论】:

    【解决方案2】:

    IIRC,mysqldump 默认生成 UTF-8 输出,无论数据库的编码是什么。 mySQL manual 中的这条用户评论似乎证实了这一点:

    我只是使用默认字符集——通常是 latin1。但是,mysqldump 生成的转储文件可能令人惊讶的是 utf8 格式。这看起来不错,但会导致 mysqldump 的 --skip-opt 选项出现问题,该选项会关闭 --set-charset 但将转储保留在 utf8 中。

    也许mysqldump默认使用utf8这一事实,并且--set-charset选项的重要性应该被更加突出地记录下来(请参阅--default-character-set属性的文档以了解当前提到的使用utf8)

    尝试跳过 iconv 步骤,可能会立即起作用。

    【讨论】:

      【解决方案3】:

      您最好将数据作为 latin1 加载到新服务器上,然后在每个表上使用适当的 ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 DEFAULT COLLATION utf8_unicode_ci(或使用某种脚本为您执行此操作)。

      或者你可以先转换,然后转储。

      【讨论】:

        猜你喜欢
        • 2020-01-26
        • 2013-06-06
        • 2016-07-13
        • 2011-12-18
        • 1970-01-01
        • 2019-12-18
        • 2010-11-29
        • 2021-12-05
        • 1970-01-01
        相关资源
        最近更新 更多