站长百科 | 数字化技能提升教程 数字化时代生存宝典
首页
数字化百科
电子书
建站程序
开发
服务器
办公软件
开发教程
服务器教程
软件使用教程
运营教程
热门电子书
WordPress教程
宝塔面板教程
CSS教程
Shopify教程
导航
程序频道
推广频道
网赚频道
人物频道
网站程序
网页制作
云计算
服务器
CMS
论坛
网店
虚拟主机
cPanel
网址导航
WIKI使用导航
WIKI首页
最新资讯
网站程序
站长人物
页面分类
使用帮助
编辑测试
创建条目
网站地图
站长百科导航
站长百科
主机侦探
IDCtalk云说
跨境电商导航
WordPress啦
站长专题
网站推广
网站程序
网站赚钱
虚拟主机
cPanel
网址导航专题
云计算
微博营销
虚拟主机管理系统
开放平台
WIKI程序与应用
美国十大主机
编辑“
WordPress数据库字符集转换
”
人物百科
|
营销百科
|
网赚百科
|
站长工具
|
网站程序
|
域名主机
|
互联网公司
|
分类索引
跳转至:
导航
、
搜索
警告:
您没有登录。如果您做出任意编辑,您的IP地址将会公开可见。如果您
登录
或
创建
一个账户,您的编辑将归属于您的用户名,且将享受其他好处。
反垃圾检查。
不要
加入这个!
<span style="border:1px solid #000; text-align:center; float:right; padding:6px;"><strong>导航:</strong> [[WordPress开发|上一页]] | {{Template:WordPress导航}}</span> <div style="clear:both;"></div> ==数据库字符集转换== 本文简要介绍了WordPress MySQL数据库表格字符集的转换过程。'''警告:字符集转换是个复杂的过程,转换前请务必进行完整数据库备份。''' '''历史记录''' 自WordPress 2.1.3版起,WordPress采用 latin1字符集以及latin1_swedish_ci排序规则创建其数据库。 '''定义字符集与排序规则''' 自WordPress 2.2版起,WordPress用户可以在[http://www.wordpress.la/codex-%E7%BC%96%E8%BE%91wp-config.php%E6%96%87%E4%BB%B6.html wp-config.php]文件中自定义数据库字符集与排序规则。在wp-config.php文件中设定DB_CHARSET与DB_COLLATE 的值,之后WordPress也会根据相应设置来创建数据库。但该设置不适用于新WordPress安装文件,也不适用于“已安装”WordPress的副本。下面介绍如何为已有WordPress安装文件转换字符集与排序规则。 '''转换数据库''' 无论做任何变动前,请务必[http://www.wordpress.la/codex-%E5%A4%87%E4%BB%BD%E6%95%B0%E6%8D%AE%E5%BA%93.html 备份数据库]。备份数据库一文中有相应操作说明。 为了方便描述,假设现在有一个以latin1字符集的数据库,我们需要将这个数据库转换为utf8字符集。 '''问题''' 需要用MySQL ALTER TABLE命令来转换数据库中的字符集。转换时,所有文本(以及类似)字段都被转换为UTF-8字符。WordPress可能在使用latin1字符集的数据库中存储Unicode字符,而进行字符集转换时默认需要转换的是latin1字符集,于是转换可能会打乱原有的文本,直接导致转换后的内容惨不忍睹,失去使用价值。 '''解决方法''' 将所有文本和类似字段转换为相应二进制字符串,然后再进行字符集转换,最后将二进制字符串转换回文本。 示例步骤: #通知访问者,此时博客处于无法访问状态 #备份数据库 #ALTER TABLE wp_users MODIFY display_name BLOB #在所有其它表/列上使用ALTER TABLE命令 #ALTER DATABASE wordpress charset=utf8 #ALTER TABLE wp_users charset=utf8 #在所有其它表/列上使用ALTER TABLE命令 #ALTER TABLE wp_users MODIFY display_name TEXT CHARACTER SET utf8; #在所有其它表/列上使用ALTER TABLE命令 #在wp-config.php中添加DB_CHARSET 与 DB_COLLATE定义 字符串字段也需要转换成相应的二进制字符串,如: *CHAR -> BINARY *VARCHAR -> VARBINARY *TINYTEXT -> TINYBLOB *TEXT -> BLOB *MEDIUMTEXT -> MEDIUMBLOB *LONGTEXT -> LONGBLOB 该信息原先发布在[http://wordpress.org/support/topic/117955 Forum Thread 117955中]。 以下语句(将其中的MyDb更改成自己的数据库名称)可以生成执行这些转换的SQL语句。如果用 -s --skip-column-names运行mysql,通过复制粘贴获取输出结果会更方便: USE information_schema; SELECT CONCAT('ALTER TABLE ', table_name, ' MODIFY ', column_name, ' ', REPLACE(column_type,'char', 'binary'), ';') FROM columns WHERE table_schema = 'MyDb' and data_type LIKE '%char%'; SELECT CONCAT('ALTER TABLE ', table_name, ' MODIFY ', column_name, ' ', REPLACE(column_type,'text', 'blob'), ';') FROM columns WHERE table_schema = 'MyDb' and data_type LIKE '%text%'; SELECT CONCAT('ALTER TABLE ', table_name, ' MODIFY ', column_name, ' ', column_type, ' CHARACTER SET utf8;') FROM columns WHERE table_schema = 'MyDb' and data_type LIKE '%char%'; SELECT CONCAT('ALTER TABLE ', table_name, ' MODIFY ', column_name, ' ', column_type, ' CHARACTER SET utf8;') FROM columns WHERE table_schema = 'MyDb' and data_type LIKE '%text%'; 根据数据库中的表和列,这些语句会输出另一些语句。将其中的数据库名称改为自己的数据库,然后运行输出的语句。 然后更改默认语言: ALTER DATABASE MyDb CHARACTER SET utf8; 也可以恢复列的类型,但一定要确保没有改动之前二进制格式或blob类型的列: SELECT CONCAT('ALTER TABLE ', table_name, ' MODIFY ', column_name, ' ', REPLACE(column_type, 'binary', 'char'), ';') FROM columns WHERE table_schema = 'MyDb' and data_type LIKE '%binary%'; SELECT CONCAT('ALTER TABLE ', table_name, ' MODIFY ', column_name, ' ', REPLACE(column_type, 'blob', 'text'), ';') FROM columns WHERE table_schema = 'MyDb' and data_type LIKE '%blob%'; (代码来源于[http://www.haidongji.com/2008/11/11/convert-character-set-to-utf8-in-mysql/ Haidong Ji's blog]中的一篇文章) ENUM类型和SET类型的转换规则更加详细:将字符设为二进制字符,如果确定ENUM或SET中的字符转换后不会出现混乱,也可以讲字符设为UTF8字符。该操作的SQL语句是: *ALTER TABLE wp_links CHANGE link_visible link_visible ENUM('Y','N') CHARACTER SET utf8; 其中的字段名称和ENUM类型都需要重复出现。 指定BINARY和VARBINARY后,字段长度也需要被指定,字段长度值等于原始CHAR以及VARCHAR的字段长度值。换言之,VARCHAR(200)变成VARBINARY(200)。 因此我们在第三步和第四步将CHAR, VARCHAR, TEXT, ENUM, 以及SET字段转换为相应的二进制字符(BLOB, VARBINARY等),在第五步中将数据库字符转换为utf8,第六步和第七步中将所有表转换为utf8字符,最后在第八步和第九步中将二进制字段字符转换为相应的CHAR, VARCHAR, TEXT, ENUM, 以及SET类型的utf8字符集。 转换字符集的关键在于,所有字段都被转换成相应的二进制类型字段而不是CHAR, VARCHAR, TEXT, ENUM, 以及SET字段,这样可以保证数据库和表中的字符集转换为utf8时不出现差错。 ==相关条目== *[[Drupal]] *[[OBLOG]] *[[X-Space]] *[[SaBlog-X]] *[[Bo-Blog]] [[category:WordPress中文文档|S]] [[category:WordPress网站开发|S]]
摘要:
请注意,您对站长百科的所有贡献都可能被其他贡献者编辑,修改或删除。如果您不希望您的文字被任意修改和再散布,请不要提交。
您同时也要向我们保证您所提交的内容是您自己所作,或得自一个不受版权保护或相似自由的来源(参阅
Wordpress-mediawiki:版权
的细节)。
未经许可,请勿提交受版权保护的作品!
取消
编辑帮助
(在新窗口中打开)
本页使用的模板:
模板:WordPress导航
(
查看源代码
)(受保护)