MySQL把性别编码转换成名字_使用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 打完收工...

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2010-01-16 10:39

浏览 1003

评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值