利用phpMyAdmin把wordpress数据从MySQL4迁移到MySQL5

通过对比用phpMyAdmin从MySQL和MySQL5导出wordpress数据的不同点,从而解决迁移中的出错问题,这个解决方法不是仅用在迁移Wordpress数据上,实际上是通用的。

利用phpMyAdmin(MySQL&phpMyAdmin安装于Win下)在MySQL4中选择数据库“导出”需要的wordpress数据,如图选择“另存为文件”这样就得到一个后缀为.sql的导出文件保存在本地机子上。

用phpMyAdmin打开MySQL5,如图默认新建一个数据库。

在“import”导入需要的数据,如图,成功后配置好数据库链接文件,即可以浏览了。

注意,文件字符集一定要选择latin1,这是在创建MySQL数据库时默认的。

上图中导入文件最大为2048k,这是收到php.ini文件控制的,通过修改upload_max_filesize,memory_limit和post_max_size可以改变这个值。

但是这样使用起来没有问题,但是如果用phpMyAdmin去看数据库表,会发现中文全部是乱码,就是上面说的文件是字符集是latin1的问题。

其实,在导出数据的时候,如果不选择“另存为文件”时,会导出一段SQL语句,如果把这个语句直接放到phpMyAdmin中执行,会出现如图错误:

这个错误就是因为有中文字符,而字符集是latin1造成的。所以这种情况下,需要修改字符集。

经过对比发现,同样的表在MySQL4中导出结果如下:

CREATE TABLE `dwn_post2cat` (

`rel_id` bigint(20) NOT NULL auto_increment,

`post_id` bigint(20) NOT NULL default '0',

`category_id` bigint(20) NOT NULL default '0',

PRIMARY KEY (`rel_id`),

KEY `post_id` (`post_id`,`category_id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=14 ;

在MySQL5中到处结果如下:

CREATE TABLE `dwn_post2cat` (

`rel_id` bigint(20) NOT NULL auto_increment,

`post_id` bigint(20) NOT NULL default '0',

`category_id` bigint(20) NOT NULL default '0',

PRIMARY KEY (`rel_id`),

KEY `post_id` (`post_id`,`category_id`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

不同点就在最后一句,所以只需要把所有到处数据中

ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=14 ;

改成

ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=14 ;

然后再到phpMyAdmin中执行SQL,SQL执行成功。

但是此时却出现乱码,这是Wordpress从MySQL 4.0x 版本以下升级到了4.1x以上遇到的问题。

彻底解决编码问题就是统一用UTF8编码,首先, 将Wordpress 的wp-includes的wp-db.php,在这句后面

$this->dbh = @mysql_connect($dbhost, $dbuser, $dbpassword);

加一句:

$this->query("SET NAMES 'utf8'");

这样就可以保证apche和MYSQL之间传递的是UTF8编码

这样就完工了。

MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。这样就可以根据数据表不同的用处是用不同的存储类型。

另外,MyISAM类型的二进制数据文件可以在不同操作系统中迁移。也就是可以直接从Windows系统拷贝到linux系统中使用。