给wordpress改编码

今天费了好大的劲把blog的mysql数据库编码从latin1改成了utf-8。唉,在上家公司工作的时候经常干这事,每次都被折腾死了。

改完之后,我用Spring-Struts-Hibernate新写的blog就可以正常的显示了。宣传一下:http://www.sunchangming.com:8077/blog/index.action

1、数据的实际编码
打开网页,然后点右键选“Encoding”。然后就可以知道现在是用什么编码浏览的这个网页。那么,实际上,也将以这样的编码提交form。如果程序没有再做转码。那么数据库里面存储的就是这样的格式。

2、数据库的编码
每次连接mysql的时候,连接属性中有一项时是字符集。实际上这个名称很不恰当。确切来说,是说这个mysql连接在使用什么编码处理字符串。
大部分应用程序,如果在连接数据库的时候没有特别指定编码,那么将会用mysql的默认编码。
例如,如果wordpress的config文件中如果没有指定编码,那么将采用当前mysql的默认编码。
这个编码是什么呢?可以这么看见:
#mysql --help |grep default-character-set

如果直接用
#mysql -uroot -pxxxx
连接数据库,那么就是采用的这个编码。
这个可以在mysql的设置文件中设置。如果不设置,默认就是latin1。

但是比较可恨的是mysqldump默认采用的是utf8。并且mysqladmin默认采用的也是utf8.
而我的Blog默认是utf-8的数据,且错被当作了latin1存在数据库中。然后再通过mysqldump或者phpmyadmin以utf8的方式导出来,那么就废掉了。

倒了数次。最后一次才成功。流程如下:
1、用mysqldump把表结构导出
mysqldump -uxxx -pxxxxx dbname --add-drop-table --skip-add-locks --no-data --single-transaction --hex-blob --default-character-set=latin1 --result-file=E:\first.sql --skip-comments
2、用mysqldump把表的内容导出。但是不要表结构。
mysqldump -uxxx -pxxxxx dbname--no-create-info --skip-add-drop-table --skip-add-locks --single-transaction --hex-blob --default-character-set=latin1 --skip-set-charset --result-file=E:\data.sql --skip-comments

3、用sed把first.sql中的latin1全部替换成utf8。因为这个文件只是表结构,所以随便找个文本编辑器挨个看着替换比较安全。

4、导入表结构,导入数据

5、更新wp-config.php.在后面加入

define('DB_CHARSET', 'utf8');
define('DB_COLLATE', 'utf8');

附注:
1、导出时要加--skip-comments是因为comments中可能有中文,会带来不必要的麻烦。
2、执行mysqldump时如果有mysql root权限,最好先执行flush tables with read lock。

此博客中的热门博文

少写代码,多读别人写的代码

在windows下使用llvm+clang

tensorflow distributed runtime初窥