我是靠谱客的博主 大意电灯胆,最近开发中收集的这篇文章主要介绍使用mysqldump 把GBK编码的数据库转换成UTF8存储,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

    打算把一个数据库编码为 utf8 的数据库,转换成gbk 来存储。以目前mysql的版本,先做一个转换测试..在数据很大量的情况下,我认为很有必要呵呵。 记下来备忘了。

 

目前mysql状态

 

mysql 版本: Server version:         5.1.41-log Source distribution

 

 

目前编码情况是这样的:

 

 

mysql> show variables like 'character%';
+--------------------------+-----------------------------------------+
| Variable_name            | Value                                   |
+--------------------------+-----------------------------------------+
| character_set_client     | gbk                                     |
| character_set_connection | gbk                                     |
| character_set_database   | gbk                                     |
| character_set_filesystem | binary                                  |
| character_set_results    | gbk                                     |
| character_set_server     | gbk                                     |
| character_set_system     | utf8                                    |
| character_sets_dir       | /usr/local/mysql5/share/mysql/charsets/ |
+--------------------------+-----------------------------------------+

可以看到,除了mysql系统级默认是utf8版本外和mysql数据文件存储编码是binary 外,其他都是GBK编码。

 

我们先从原数据库备份出数据先,原数据库的编码和表、字段 都是UTF8等等

 

beihai365# mysqldump -u root -p --no-create-info --default-character-set=utf8 ud_sphinx > /usr/local/sqlbak/ud_sphinx.sql

 


--default-character-set=utf8  表示以 utf8为导出数据文件的内部编码

 

用vi 打开到处的数据库文件  ud_sphinx.sql  可以看到头部有这么一行

 

/*!40101 SET NAMES utf8 */;

说明了我们的这个数据库文件以utf8导出的。

 

这个是试验得出的结果~~不是书上的理论。

书上说  “--default-character-set=gbk 表示 设置以什么字符集进行连接”这个话看了真是莫名其妙...

 

如果证明导出的的文件内部编码就是utf8的呢

 

我们用ie打开导出的数据库文件  ud_sphinx.sql

 

ie -> 查看 -> 编码 . 我们选择gb2312来进行文本的显示,结果发现,看到的都是乱码

 

LOCK TABLES `business` WRITE;
/*!40000 ALTER TABLE `business` DISABLE KEYS */;
INSERT INTO `business` VALUES (1,1,'鍏揪,鑷杞?瓒婇噹,鎷撳睍,鍩硅','鍖楁捣鍏揪鑷杞?-涓撲笟鐨勫崠杞︽嫇灞曟椿鍔?,'http://bada.beihai365.com/'),(3,3,'鐗涜叐,鐗涜叐绮?鐗涜叐寮?鐗逛骇','鍖楁捣鐗逛骇鐗涜叐绮夊ソ鍚冧笉璐?,'http://www.beihai365.com/bbs/viewthread.php?tid=1380307');
/*!40000 ALTER TABLE `business` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

然后,我们选择 utf8编码来进行显示,就看到,中文显示正确了。

 

接下来开始创建一个一模一样数据结构的数据库,但数据库编码,和表、字段等编码都是GBK的

 

创建数据库:

create database ud_test character set=gbk;

 

为了快速,所以我们选择了复制表结构


mysql> create table business like ud_sphinx.business;

因为默认的  ud_sphinx.business 编码是 utf8,所以修改一下编码

 

alter table business character set gbk;

好,开始导入数据

 

我做了几个试验:

 

1 我没有显示显式在命令中指定导入编码

 

mysql -u root -p ud_test < /usr/local/sqlbak/ud_7.sql  ( 导入成功,无乱码)

 

2 我显式指定编码,而且还是指定了一个 latin1 编码


mysql -u root -p ud_test --default-character-set=latin1  < /usr/local/sqlbak/ud_7.sql (导入成功,无乱码)

 

3 我直接修改 ud_7.sql里面的  set names *  语句,指定为  gbk 编码

 

beihai365# mysql -u root -p ud_test  < /usr/local/sqlbak/ud_7.sql (乱码)

 


总结:

 

1   --default-character-set  参数导出的时候,是告诉mysql 生成的备份文件所使用的文件内码是啥。

2  导出的数据文件里面的 set names *  和 显式在命令中指定编码,优先起作用的是 数据文件里面的 set names *

 

转换数据库编码的时候关键几点:

 

第一个是源字符集和要导出的字符集的,数据集范围问题:小集变大集可以,大集变小集,可能会出现乱码。(可使用ie来选择编码来浏览看是否乱码)

第二个导入数据的时候,要注意数据文件的内部编码是什么(也就是导出 default-character-set=*指定的编码) ,还要注意,数据文件头部的 set names *  写的是什么编码。 内部编码和 set names 的编码要一至,导入的时候才不会出现乱码现象。 set names 是告诉mysql 以什么样的编码方式来导入这个数据文件。其实和 http server 里面的mime 一个道理。

 

okay 打完收工...

最后

以上就是大意电灯胆为你收集整理的使用mysqldump 把GBK编码的数据库转换成UTF8存储的全部内容,希望文章能够帮你解决使用mysqldump 把GBK编码的数据库转换成UTF8存储所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部