解决使用 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 不再显示 ?? 了。至此问题解决。
———
总结:

  1. 必须把数据库完全(包括 Table, Field, 和 Collation)变成 UTF-8 格式才能用 SQL 命令处理中文字符。
  2. Wordpress 似乎对中文的处理不太理想,必须手动添加一行代码。

One Comment

  1. kevin says:

    解决了就好

RSS feed for comments on this post · TrackBack URI

Leave a Reply