用镜头记录,用心灵体验 | 订阅本站 | 所有笔记 | 亲和力设计 | 流量

DB2 学习笔记

博客话题:DB2,Linux,Web,业余无线电,户外,摄影,截拳道,Thankpad,其他

Movable Type

MT3.34 升级至 MT4.26 数据库中文乱码的解决

目录

  1. 参考资料

上次升级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设定。

有关插件的部分再单独讨论。

参考资料

Alex's picture

my email address in picture

搜索|Search

评论|Recent Comments

按月归档|By Month

2009
07
2008
11
10
07
05
04
03
02
01
2007
12
10
07
06
05
04
03
02
01
2006
12
11
10
09
08
07
06
05
04
03
02
01
2005
11
10
09
08
07
04
03
2004
12
11
10
09
08
07
06
05
04
03
02
01
2003
12
10
09
08
06
2002
09
08
04
03
02
2001
12
09
07
06
05

我读|My Books

我的链接|My Links

我的朋友|My Friends

Creative Commons License
This blog is licensed under a Creative Commons License.
Movable Type 4 Logo