Wordpress 超大数据库的导入
可能有人遇到过这种问题:想给 Blog 搬家,换主机时需要把导出的数据库重新导入到新的数据库主机中,但 MyPHPAdmin 对数据库大小的有限制,这个限制各个主机商不一样,有的 5M 有的 8M,抠门一点的只有 2M,当你的数据库大过这个限制时,根本无法导入。有时候就算没大过这个限制,也会在导入时超时。
那么怎么解决这个问题呢?你的主机支持 Shell 的话,你可以 SSH 登陆主机,执行如下的命令:
导出数据库:
mysqldump -h HOSTNAME -uUSERNAME -p DBNAME > exported_db.sql
导入数据库:
mysql -h HOSTNAME -uUSERNAME -p DBNAME < exported_db.sql
在 Shell 下导入数据库不再受到 MyPHPAdmin 中的导入大小限制,理论上数据库可以无限大。
hhalloyy 同学在自己的数据库上对以上的方法进行了验证,在此鸣谢。
解决使用 MySQL 命令不能添加中文内容
下面来重现一下解决问题的过程。
我想为批量为我的blog上的一些帖子加上tag, 但不想一个帖子一个帖子的改,主要是太麻烦了,所以就想直接用 MySQL 命令来完成。我用的tag插件是 Jerome’s Keywords, 因此修改的主要的原理就是往数据库中的 wp_jkeywords 这个表里添加相应的 post_id 和 tag_name.
可以用命令:
INSERT INTO wp_jkeywords (post_id, tag_name) VALUES (帖子编号, tag名);
来完成。
不过在命令执行完后,我检查相应的帖子,发现所有的中文tag全部显示成了 ??, 第一个念头就是 Table 的编码不是 UTF8, 检查后发现已经是 UTF8 了。发信求助后在海豚的提醒下检查了一下 Collation 发现依然是默认的 latin1_swedish_ci 编码,不过由于没找到改变 Collation 的编码的选项,于是我在 wordpress 后台导出数据库,然后在 editplus 下把数据库中所有 character set latin1 改成 character set utf8 后重新导入, 然后在 phpMyAdmin 中检查导入的内容,发现所有的编码都已经变成 uft8 了。在 phpMyAdmin 后台看到中文数据显示正常,不再是以前看到的乱码。
接着打开我的 blog 后发现,所有的帖子内容都是 ?, 想起以前看到过的解决方案,于是打开 wp-include 目录把文件 wp-db.php 里
$this->dbh = @mysql_connect($dbhost,$dbuser,$dbpassword);
这行下加上$this->query("SET NAMES 'utf8'");
再打开 blog 后显示正常。
以后再用 SQL 命令添加中文 tag 不再显示 ?? 了。至此问题解决。
———
总结:
- 必须把数据库完全(包括 Table, Field, 和 Collation)变成 UTF-8 格式才能用 SQL 命令处理中文字符。
- Wordpress 似乎对中文的处理不太理想,必须手动添加一行代码。

