垃圾回收站

June 2, 2007

完美解决MT3.2数据库转移及备份乱码问题!!

[ 分类: Mysql ] 由 弗里曼·潘 发表于 12:16 am

MovableType 3.2迁移涉及三个部分
1.mysqldump 导出时的charset转换
2.新建数据库时设置默认charset为utf8,导入数据库
3.在MT的cgi-bin的lib中DBI中的mysql.pm中加上set names指定MT默认提交的charset设定。

设计的细节较多,休息一会儿再写。 :)
补完 :)

事件:
将MT3.2从服务器A转移到服务器B。
我从电脑A导出mt数据库为sql文件,导入到电脑B,发现部分出现乱码。乱码频率高,不可忍受。

MT3.2数据库乱码原因:
服务器A和B上的MySql的MT数据库默认编码都是latin1。
意味着我们在MT上提交的数据都从默认的UTF8转成了latin1,并存储到数据库中。读取时,又从latin1转到了utf8,所以转移之前我们感觉不到问题。
但是此时,查看MySql中mt数据库mt_entry等含有中文字的表,都发现将是乱码。
当然除了这个还有更深层的原因。请看解决步骤。

1.导出服务器A上的mt数据库
点击开始, 选择“运行”, 键入cmd,进入命令行模式。
用cd命令进入mysql\bin,执行
mysqldump -uroot -p –default-character-set=latin1 –set-charset=utf8 –skip-opt mt > mt_backup.sql
(此处mt为mt数据库名,如果你的不同,请相应更改)
提示密码,输入,ok.
copy目录下mt_backup.sql到服务器B的mysql\bin目录下。

2.服务器B上新装mt3.2,建出数据库mt。删除数据库mt。新建数据库mt,选择默认编码为utf8。
这样的好处是,即使在phpMyadmin中查看也不是乱码了.
mysqldump -uroot -p –default-character-set=utf8 mt < mt_backup.sql
数据库导入成功。

3.将mt_blog表中一些原服务器A中的路径修改为服务器B中mt blog发布的路径。
这里很重要,注意不要弄错。

4.以上都弄完后,发现mt还是乱码,而且还乱的更厉害了,这是因为mt与后台建立连接时还是使用默认的latin1发起连接。导致了又一次的不必要转换。
解决办法,在mt所在的cgi-bin目录下的\lib\MT\ObjectDriver\DBI里面找到mysql.pm,用编辑器打开
找到sub init,在最后一句$driver;之前加上
$driver->{dbh}->do(”SET NAMES ‘utf8′”);
然后再试试重建blog页面吧。
乌拉,一切OK。 Blog页面&PHPmyadmin中都正常显示中文字了。 ^_^

sub init {
    my $driver = shift;
    $driver->SUPER::init(@_);
    my $cfg = $driver->cfg;
    my $dsn = 'dbi:mysql:database=' . $cfg->Database;
    $dsn .= ';hostname=' . $cfg->DBHost if $cfg->DBHost;
    $dsn .= ';mysql_socket=' . $cfg->DBSocket if $cfg->DBSocket;
    $dsn .= ';port=' . $cfg->DBPort if $cfg->DBPort;
    $driver->{dbh} = DBI->connect($dsn, $cfg->DBUser, $cfg->DBPassword,
        { RaiseError => 0, PrintError => 0 })
        or return $driver->error(MT->translate("Connection error: [_1]",
             $DBI::errstr));
	$driver->{dbh}->do("SET NAMES 'utf8'");
    $driver;
}

参考文献:
http://www.simplicidade.org/notes/archives/2005/12/utf8_and_dbdmys.html
http://www.youthfly.net/blog/blogview.asp?logID=191


0 条评论 »

还没有人对这篇文章发表评论,赶紧留一个吧。

RSS feed for comments on this post. TrackBack URI

相关文章:
  • 暂时没有相关的文章
  • 发表评论