代码之家  ›  专栏  ›  技术社区  ›  Matt

正在将UTF-8编码的转储加载到MySQL中

  •  9
  • Matt  · 技术社区  · 16 年前

    昨天我就这个问题发表了几个小时的意见:

    我在MySQL4.1.22服务器上有一个数据库,其编码设置为“utf-8unicode(utf8)”(由phpmyadmin报告)。此数据库中的表的默认字符集设置为 拉丁语2 . 但是,使用它的Web应用程序(CMS使用PHP编写简单)显示 UTF8

    不管这有多糟糕,它实际上是有效的。Web应用程序正确显示字符(主要使用捷克语和波兰语)。

    我运行:“mysqldump-u xxx-p-h yyy dbname>dump.sql”。这给了我一个SQL脚本,它:

    • 在任何编辑器(如记事本+)中显示时看起来都很完美 UTF-8 -所有字符正确显示
    • 脚本中的所有表都将默认字符集设置为 拉丁语2
    • 它有“/*”!40101在开始处设置名称拉丁2*/;“行(以及其他设置)

    现在,我想将这个数据库导出到另一个运行在MySQL5.0.67上的服务器,服务器编码也设置为“utf-8unicode(utf8)”。我复制了整个CMS的简单安装,复制了dump.sql脚本,运行了“mysql-h ddd-u zzz-p dbname<dump.sql”。之后,在显示CMSMS网页时,所有字符都被置乱。

    我尝试设置:
    设置字符_set_client=utf8;
    设置字符_set_connection=latin2;

    所有的组合(只是为了安全起见,即使对我来说没有任何意义):拉丁语2/utf8、拉丁语2/latin2、utf8/utf8等等-都没用。所有字符仍然混乱,但有时会以不同的方式:)。

    我还尝试将脚本中的所有Latin2设置替换为utf8(表的集合名称和默认字符集)。没有什么。

    这里有没有MySQL专家可以用几个词(我敢肯定这很简单)来解释整个编码工作的原理?我读过 9.1.4. Connection Character Sets and Collations 但没有发现有什么帮助。

    谢谢, 马特

    3 回复  |  直到 11 年前
        1
  •  29
  •   kolrie    16 年前

    是否尝试添加--default character set=name选项,如下所示:

    mysql --default-character-set=utf8 -h ddd -u zzz -p dbname < dump.sql
    

    我以前有过这个问题,使用这个选项后它就工作了。

    希望它有帮助!

        2
  •  0
  •   Matt    16 年前

    呃…好吧,看来我找到了解决办法。

    MySQL不是罪魁祸首。我现在做了一个简单的转储和加载,没有对dump.sql脚本进行任何更改,这意味着我保留了“set names latin2”和表字符集。然后我将原来的CMSMS安装切换到新数据库,然后…它工作正常。因此,实际上,数据库中的编码是可以的,或者至少它可以与我在旧的主机提供商(显然是CMSMS)上安装的CMSMS一起正常工作。 does funny things with characters encoding )

    为了让它在我的新主机提供商上工作,我实际上必须将这一行添加到CMSMS安装中的lib/adodb/drivers/adodb-mysql.inc.php中:

    mysql_query('set names latin2',$this->_connectionID);

    这是从 this post . 你也可以在那里找到确切的线。所以看起来像是mysql客户端配置问题。

        3
  •  0
  •   kittycat    11 年前

    我的解决方案:

    在php文件中设置此选项,之后 MySQL连接 (或之后) MyQuLL选择数据库

    mysql_query("SET NAMES 'utf8'");