当前用户: 游客
请考虑注册为论坛会员

 
搜索讨论区:


 




Wordpress MYSQL 数据库转码
—阅读本主题的博客原贴

用户帖子

18:26
08-04-25


央街浪子

管理员

admin

帖子数 94

 
1

昨天在安装[name]Ultimate Tag Warrior, http://www.neato.co.nz/ultimate-tag-warrior/name,输入中文tag名字时,碰到一条错误信息:

WordPress database error: [Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation ‘=’]

这显然是php程序中设定的collation编码和数据库设定的collation编码不同造成的冲突。
wp的字符编码collations设定是utf8,而UTW的3个表post2tag,tags,tag_synonyms用sqlyog查看都是latin1_swedish_ci。网上查了下资料,发现UTW在first time active的时候会建表,而建表用的collation是根据数据库的编码default来了。想起来我在建wp后台mysql库的时候只是缺省的用create database而没有加任何char set,自然编码都是跟着缺省用的latin-1了。幸好去年在玩vbulletin论坛升级的时候,有玩过转码,就如此这般的搞了一下:

# mysqldump -uroot -p –extended-insert=FALSE –opt dbname > dbname_before.sql

# sed -e ’s/latin1/utf8/’ dbname_before.sql > dbname_after.sql

# mysql -uroot -p

mysql>drop dbname;

mysql>create dbname CHARACTER SET utf8 COLLATE utf8_general_ci;

mysql>exit;

#mysql -uroot -p –default-character-set=utf8 dbname < dbname_after.sql

(# 是unix 提示符,mysql> 是mysql的提示符):
首先使用不加任何编码参数的mysqldump命令行导出,导出的就是原来latin1的,–extended-insert=FALSE是避免Insert语句太长而导致出错;导完后用less可以看到,建表字符集都是表明的latin1

接着sed其实是个unix上的一个流式编辑器(stream editor),把一个文件当字符流读入,根据后面的替换规则替换相应字符,-e ’s/latin1/utf8/’ 就是把所有latin1的地方换成utf8

然后进入mysql把原来的database 删掉,再用带char set/collate参数的 create database建立缺省编码是utf8的数据库

最后导入处理过的sql文件到新建的数据库中,带default-character-set参数指明编码。


—阅读本主题的博客原贴



回复主题: Wordpress MYSQL 数据库转码

游客名字 (必填):

游客邮件地址 (必填):

Guest URL (required)

数学计算 (必填)
10 + 4 之和是多少?       (必填)

主题回复:


 
 

关于 随便说说SBTalk 论坛

当前在线:

央街浪子

4 游客

最高在线人数: 40

讨论区:

讨论组: 3

讨论区: 7

主题数: 79

帖子数: 187

会员数:

有 58 位会员

有 37 位游客


央街浪子 已发表 94 篇帖子

发帖最多:

央街小小 - 11

Rey - 6

misser - 4

idpw.cn - 3

uhlan - 2

讨论区管理员:央街浪子 | 版主:央街浪子, 央街小小


© Simple:Press Forum - 版本 3.1.3 (Build 356)