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

时间:2008-09-30 08:53:11

标签: mysql encoding utf-8

我昨天几个小时一直在听取这个问题:

我在MySQL 4.1.22服务器上有一个数据库,编码设置为“UTF-8 Unicode(utf8)”(由phpMyAdmin报告)。此数据库中的表将默认字符集设置为 latin2 。但是,使用它的Web应用程序(用PHP编写的CMS Made Simple)显示 utf8 中的页面......

然而搞砸了这可能是,它确实有效。 Web应用程序正确显示字符(主要使用捷克语和波兰语)。

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

  • UTF-8 中显示时,在任何编辑器(如记事本+)中看起来都很完美 - 所有字符都能正常显示
  • 脚本中的所有表都将默认字符集设置为 latin2
  • 它有“/ *!40101 SET NAMES latin2 * /;”开头的行(在其他设置中)

现在,我想将此数据库导出到在MySQL 5.0.67上运行的另一台服务器,同时将服务器编码设置为“UTF-8 Unicode(utf8)”。我复制了整个CMS Made Simple安装,复制了dump.sql脚本并运行了“mysql -h ddd -u zzz -p dbname< dump.sql”。之后,在显示CMSMS网页时,所有字符都会被加扰。

我尝试过设置:
SET character_set_client = utf8;
SET character_set_connection = latin2;

所有组合(只是为了安全,即使它对我没有任何意义):latin2 / utf8,latin2 / latin2,utf8 / utf8等 - 没有帮助。所有角色仍然在加扰,但有时以不同的方式:)。

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

这里有没有MySQL专家可以用几句话来解释(我相信它毕竟很简单)这整个编码的东西真的有用吗?我看过9.1.4. Connection Character Sets and Collations,但没有发现任何帮助。

谢谢, 马特

3 个答案:

答案 0 :(得分:30)

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

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

之前我遇到过这个问题,并且在使用该选项后它有效。

希望它有所帮助!

答案 1 :(得分:0)

呃......好吧,似乎我找到了解决方案。

MySQL不是罪魁祸首。我现在做了一个简单的转储和加载,没有更改dump.sql脚本 - 这意味着我离开了“set names latin2”和表charsets。然后我将原来的CMSMS安装切换到新数据库并且...它正常工作。所以在数据库中实际编码是可以的,或者至少它与我在旧的托管服务提供商(CMSMS显然是does funny things with characters encoding)上的CMSMS安装一起正常工作。

为了让它在我的新托管服务提供商上运行,我实际上必须在CMSMS安装中将此行添加到lib / adodb / drivers / adodb-mysql.inc.php:

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

这是this post稍微修改过的解决方案。你也可以在那里找到确切的线。所以它看起来像是mysql客户端配置问题。

答案 2 :(得分:0)

对我的解决方案:

mysql_connect 之后(或 mysql_select_db 之后)在php文件中设置此选项..

mysql_query("SET NAMES 'utf8'");