目录
上次升级MT是两年前的事情了,过程很顺利,这次就没那么幸运,遇到了字符集的问题,此外还有一些插件的问题,而且都比较棘手。
字符集的问题与虚拟主机有一定关系,数据存储在Dreamhost主机的mysql数据库中,3.34版本的数据库使用Dreamhost上Mysql默认的字符集Latin1,升级完成,切换到MT4.26之后,登录MT后台管理,数据库中所有的中文是乱码(问号),尝试了一个从前(MT3.34)的解决方法: 在文件 cgi-bin/mt/lib/MT/ObjectDriver/DBI/mysql.pm 中增加一行: $driver->{dbh}->do("SET NAMES 'utf8'");,这句代码告诉数据库,客户端和数据库连接都使用utf-8编码,数据库返回的数据也使用utf-8编码,但于事无补,乱码依旧。临时学习了一下Mysql处理字符集的机制,找到了一个解决方法:先将升级后(MT4.26)的数据导出,然后新建一个utf-8编码的数据库,最后导入数据即可。
导出数据:
$ mysqldump -h HOSTNAME -u USERNAME -p DBNAME > DUMPFILE
Dreamhost中似乎无法命令行创建数据库,只能在Web phpMyAdmin中创建,Dreamhost的Mysql服务器参数character_set_server的默认值是utf8(从前是Latin1),可以用以下命令查看:
mysql> use DBNAME; mysql> show variables like 'character_set_%';
如果不是utf8,可以用以下命令修改:
mysql> alter database DBNAME default character set utf8;
最后一步,导入数据:
$ mysql -h HOSTNAME -u USERNAME -p DBNAME < DUMPFILE
补充一下,查看了部分MT4的代码,在mt-config.cgi中设定: PublishCharset utf-8 应该相当于在应用程序中: SET NAMES 'utf8',而Dreamhost Mysql服务器目前与字符集有关参数的默认值如下:
+--------------------------+---------------------------------------------+ | Variable_name | Value | +--------------------------+---------------------------------------------+ | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | latin1 | | character_set_server | latin1 | | character_set_system | utf8 | +--------------------------+---------------------------------------------+
与客户端有关的几个参数默认值是Latin1(非utf8),而MT4的PublishCharset默认值与MT后台管理User的Language 设定有关,对于值English,其对应了编码utf-8,此时,可以省略mt-config.cgi中的PublishCharset设定。
有关插件的部分再单独讨论。
参考资料
- 文章信息
- 版权声明: 本文可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息。
- 原文出处: http://www.aiview.com/
- 写于: 2009-07-13 [Edit]
- 作者: Alex (email &msn)

- 标签 Tags: MT (25), upgrade (5)


