昨天几个小时我一直在关注这个问题:
我在 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。连接字符集和排序规则,但在那里没有发现任何帮助。
谢谢,马特