解名缰 鸟倦飞

虚惊一场

2009 年 10 月 08 日 | 分类于 学习中

今天练习了一下利用phpMyAdmin来导入导出WP的数据,结果执行之后发现中文全变成了问号,当时想肯定是编码的问题。检查了一下导出的sql文件,发现里面确实有很多乱码,但是GB2312、GBK、UTF-8都试了一遍,乱码依旧存在。仔细一看发现,原来导出的sql文件是用两种编码写出来的,phpMyAdmin的工作编码是GB2312,但WP存储的数据是UTF-8,所以不管用GB2312编码还是用UTF-8,总会有乱码存在。这种情况之前没遇到过,所以只好用傻办法,轮换更改编码,把显示正确的内容粘到另一个文本文件中,最后保存为UTF-8。

然而问题依然存在,当我把显示正确的sql文件导入到phpMyAdmin中时,中文仍然会变成问号。在导入的时候可以选择导入文件的字符编码,但我试了很多个,问题还是没有解决。后来到网上搜了一下才知道,phpMyAdmin会把新建数据库的字符集设定为latin1_swedish_ci(估计程序的编写者是瑞典人),在之前导出的sql文件中,包含了新建数据库的命令,因此数据库也就成了latin1_swedish_ci编码,这时再读取中文,自然就变成问号了,并且之后再怎么修改编码也于事无补。换言之,在用phpMyAdmin导入sql文件时,界面中要你指定的字符集与数据库实际的字符集是两个完全独立的概念。找了一些资料后,目前惟一(感觉是)的解决办法是预先在phpMyAdmin中建好相应的数据库,设定好字符集,再用phpMyAdmin的导入功能将数据库进行填充。不过这时要注意的是在sql文件中需要把CREATE DATABASE命令删掉,否则导入时就会提示数据库已经存在而无法导入。

总而言之,在用Ubuntu时,有两样东西我是很害怕的,那就是编码和字体……