10

昨天几个小时我一直在关注这个问题:

我在 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显示时,在任何编辑器(如 Notepad+)中看起来都很完美- 所有字符都正确显示
  • 脚本中的所有表都将默认字符集设置为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。连接字符集和排序规则,但在那里没有发现任何帮助。

谢谢,马特

4

3 回答 3

32

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

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

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

希望能帮助到你!

于 2008-09-30T12:02:57.430 回答
0

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

MySQL 不是这里的罪魁祸首。我现在做了一个简单的转储和加载,没有更改 dump.sql 脚本——这意味着我保留了“设置名称 latin2”和表格字符集。然后我将原来的 CMSMS 安装切换到新数据库,然后……它工作正常。所以实际上在数据库中编码是可以的,或者至少它适用于我在旧托管服务提供商处安装的 CMSMS (CMSMS 显然对字符编码做了一些有趣的事情)。

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

mysql_query('设置名称 latin2',$this->_connectionID);

这是来自这篇文章的稍微修改的解决方案。您也可以在那里找到确切的行。所以它看起来像mysql客户端配置问题。

于 2008-09-30T12:00:16.113 回答
0

我的解决方案:

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

mysql_query("SET NAMES 'utf8'");
于 2014-01-16T09:08:31.283 回答