昨天我花了几个小时来思考这个问题:

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

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

我跑:“mysqldump -u xxx -p -h yyy 数据库名称 > dump.sql”。这给了我一个 SQL 脚本:

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

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

我尝试设置:
设置字符集客户端=utf8;
设置字符集连接=拉丁2;

以及所有组合(只是为了安全起见,即使它对我来说没有任何意义):latin2/utf8、latin2/latin2、utf8/utf8 等- 没有帮助。所有字符仍然处于混乱状态,但有时以不同的方式:)。

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

这里有没有 MySQL 专家可以用几句话解释一下(我确信这毕竟很简单)整个编码的东西是如何工作的?我读 9.1.4.连接字符集和排序规则 但发现那里没有任何帮助。

谢谢、 马特

有帮助吗?

解决方案 2

啊...好吧,看来我找到了解决方案。

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

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

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

这是一个稍微修改过的解决方案 这个帖子. 。您也可以在那里找到确切的线路。所以看起来像是 mysql 客户端配置问题。

其他提示

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

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

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

希望能帮助到你!

我的解决方案:

在您的 php 文件中设置此选项后 mysql_连接 (或之后 mysql_select_db)..

mysql_query("SET NAMES 'utf8'");
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top