51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

测试开发精英班,通向高级软件测试工程师【周活动】 找茬--心里圈的故事 !【长期招募】博为峰网校招聘兼职讲师!横扫BAT,Python全栈测试开发技能大全
【107期】:快速构建python web 全栈开发的开发思维【征稿】提交你的测试成绩单! 【专题】用尽一切办法只为让你学好用例 自学软件测试那点事
查看: 4828|回复: 4

MySQL导入导出数据出现乱码的解决办法

[复制链接]

该用户从未签到

发表于 2014-9-5 10:10:49 | 显示全部楼层 |阅读模式
在mysql导入导出数据时经常出现中文乱码的问题,大多是因类导入导出时编码设置不一致所引起的。本文介绍了不同平台下的编码转换方法,供大家参考。
在linux系统中默认的是utf8编码,而windows是gbk编码,如果在这二个系统间导入未经指定编码的数据,就会出现乱码。
首先,确定导出数据的编码格式,使用mysqldump的时候需要加上--default-character-set=utf8,
例如:

mysqldump -uroot -p --default-character-set=utf8 dbname tablename > bak.sql
那么导入数据时也要使用--default-character-set=utf8:

mysql -uroot -p --default-character-set=utf8 dbname < bak.sql
统一编码后,mysql数据迁移中的乱码问题就解决了。
使用windows作为导出数据源,并导入 freebsd环境下的mysql库,解决方法详解。
导出数据
一、首先,在windows平台下mysql用作导出数据库源。
查看字符编码的系统变量:

代码示例:
mysql> show variables like ‘%char%';
+————————–+—————————-+
| Variable_name | Value |
+————————–+—————————-+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | gbk |
| character_set_system | utf8 |
| character_sets_dir | D:mysqlsharecharsets |
+————————–+—————————-+

查看character_set_database,这里是latin1,latin1是装不了多字节字符集的。
二、在windows下设置系统变量为utf8

mysql>set character_set_database=utf8; ##设置默认的字符集为utf8
三、导出数据

mysql> select * from table into outfile ‘c:table.txt' where +条件

这时导出了部分数据,并以txt文件存在 table.txt中。
导入数据
在freebsd平台下
一、同样设置字符编码的系统变量

代码示例:
mysql> show variables like ‘%char%';
+————————–+—————————-+
| Variable_name | Value |
+————————–+—————————-+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | gbk |
| character_set_system | utf8 |
+————————–+—————————-+
mysql>set character_set_database=utf8; ##设置默认的字符集为utf8
二、转载数据

mysql>load data local infile ‘/home/table.txt' into table `table`;
至此、条件数据完整导入导出,并处理了乱码的情况。
总之,两台mysql服务器导入导出时,一定要确保两台服务器的character_set_database参数相同,这样才能防止一些乱码的情况。当然我们还可以使用其他字符集,如gbk来进行调整。
解决方法三
乱码解决方法
导入数据后,在命令行查看发现中文乱码
使用以下命令查看系统字符集

show variables like 'char%';
如果不是GBK或UTF8,则停止mysql服务,然后到安装目录修改my.ini文件,
将文件中下面的变量改成如下,如果没有这个变量则增加这些变量

[mysql]
default-character-set=gbk
[mysqld]
character-set-server=utf8

重新启动服务,重新导入数据,如果还乱码,只要把导入与导出编码统一即可解决问题。
回复

使用道具 举报

  • TA的每日心情
    慵懒
    2014-11-5 05:53
  • 签到天数: 20 天

    连续签到: 2 天

    [LV.4]测试营长

    发表于 2014-9-18 16:14:23 | 显示全部楼层
    不看不知道,看了才知道。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-1-9 16:36
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    发表于 2015-1-13 20:37:52 | 显示全部楼层

    楼主的文章很好
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2015-4-29 13:29:37 | 显示全部楼层
    技术专帖,赞一个
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    昨天 09:34
  • 签到天数: 911 天

    连续签到: 1 天

    [LV.10]测试总司令

    发表于 2016-3-23 11:20:49 | 显示全部楼层
    感谢分享,谢谢
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2019-10-20 06:54 , Processed in 0.071085 second(s), 27 queries .

    Powered by Discuz! X3.2

    © 2001-2019 Comsenz Inc.

    快速回复 返回顶部 返回列表