TypeCodes

完美解决Mysql导入数据库中文乱码的问题

1 问题由来:博客从 WordPress 转向 Typecho

在由 WordPress 转向 Typecho 的过程中,主要难点是将 WordPress 中的文章和评论数据用 wordpress to typecho 插件剥离出来。经整理后再重新将文章转换为 markdown 格式发布到由ty搭建的本博客上,最后把评论导入到对应的文章下面,并对评论id重新排序。

2 本地编辑剥离出的文章和评论的.sql备份文件

通过插件把wordpress中文章和评论的数据转换成 typecho 形式的文章和评论数据,并导出为.sql备份文件。由于评论数据有1521条,对其id重新排序比较困难,所以博主将它们分拆为两个 .sql 文件(其中一个是utf-8格式的resultsql1.sql,另一个是gbk格式的resultsql2.sql)。

由于当时没注意文件格式,在把这两个sql文件上传到主机空间后,执行命令mysql -u typecodes -p typecodes</root/resultsql1.sql;mysql -u typecho -p typecho</root/resultsql2.sql;。前者导入后,博客页面显示正常,但是文件2导入后,出现了乱码。原因是博客初始建数据库时,默认的编码格式是 utf-8 ,而导入的文件resultsql2.sql是 gbk 的格式,所以出现了乱码现象。

3 解决方法:

思路:先在本地数据库将gbk的格式 resultsql2.sql 转换成Unicode格式,然后导入到本地数据库中,最后以utf-8的格式导出,再把导出的.sql文件导入到阿里云远程数据库中。这里用到了SQLog工具。

1、在本地电脑打开SQLog软件,然后建立本地数据库连接。

SQLog连接本地数据库 typecho

2、将gbk文件 resultsql2.sql 用记事本打开,然后选择“另存为”,在底部的编码一栏中选择第二项Unicode。保存好后,再用记事本打开,然后复制所有内容;

3、把刚才复制的信息粘贴到下图框中,然后点击左上角的双箭头按钮,或者快捷键“Ctrl + F9”执行所有复制的语句。

SQLog执行所有sql语句 typecho

4、执行完步骤3中所有的SQL语句成功,就可以在SQLog底部看到下图所示“信息”。这时点击SQLog左上角的“刷新”按钮。然后用phpmyadmin查看表 typecho_comments 中的中文是否还是乱码。很庆幸,显示正常了。

SQLog执行结果没有乱码的中文

5、最后一个步骤,如果本地数据库中的表 typecho_comments 没有乱码,那么就将这个表导出为 utf-8 格式的 resultsql2.sql 文件,然后上传到阿里云远程主机上,再执行以下命令导入到博客数据库中就解决了。

###### 一定要和创建数据库时设置的编码utf8一致
[root@typecodes ~]# mysql -u typecodes -p typecodes < /root/resultsql2.sql -f --default-character-set=utf8;
Enter password:   #输入用户typecode的密码然后回车
mysql>    #然后就可以查看 typecho_comments 没有乱码的中文了
打赏支持

Comments »