mysql中文乱码总结

最近在mysql数据库环境工作了2个月,由于上游提供的数据各种各样,数据入库总是碰到错误,今天小编总结下处解决中文乱码的思路:

介绍前先普及下mysql关于字符集有哪些变量

mysql> show variables like ‘%char%’;

character_set_database : 数据库的字符集,即use databasename对应得数据库名字符集
character_set_server: 默认的内部操作字符集 ,创建一个数据库时不指定字符集,以此参数的字符集为数据库默认字符集
character_set_client: 客户端使用的编码,如GBK, UTF8 比如你写的sql语句是什么编码的。
character_set_results :查询返回的结果集的编码(从数据库读取的数据是什么编码的)。
character_set_connection: 连接使用的编码
character_set_system:系统元数据(字段名等)字符集

它们之间存在一个转换过程(具本的还请见手册):

character_set_client -> character_set_connection >内部操作字符集->character_set_results,具体关系这里不介绍,此链接http://www.cnblogs.com/lazyno/archive/2015/02/07/4278544.html
http://www.jb51.net/article/29960.htm有关其中关系

回到我在工作中碰到场景:

数据文件是utf8编码,数据库对应变量字符集为:*
mysql> show variables like ‘%char%’;
+————————–+———————————————+
| 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 | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/percona-xtradb-cluster/charsets/

这里写图片描述

导入报错:
这里写图片描述

解决方案一:修改数据库的字符集为utf8
这里写图片描述

解决方案二:load导入指定字符集
这里写图片描述

结果查询显示中文需考虑的是:character_set_results和控制终端的编码决定

在场景一使用导入成功查询结果:
这里写图片描述

因此查询结果正常显示中文需要终端(我使用secureCRT工具)和数据库变量character_set_results一致才可以

这里写图片描述

举例场景文件是UTF8,数据库编码是GBK;反之数据文件GBK,数据库编码是UTF8也是同理
数据库导出的文件编码为UTF8,在WINODWS查看乱码,因此在导出时也可以指定编码导出。查看我的博客http://blog.csdn.net/qq_32041579/article/details/72627974中导出的CSV即是在WINDOWS下可以正常显示中文

个人总结:

  • 导入

              1. 碰到导入字符集的问题,先要检查数据库变量对应编码(character_set_databasename)
              2. 查看导入文件的编码(file 2131res.del)
              3. 对照两个编码是否相等
              4. 解决有什么方法可以修改其编码一致或者指定数据库以什么编码读入文件(有些文件不指定编码
                 就默认数据库的编码入文件,因此报错;但有些编码文件可以根据文件推测出其编码即不用
                 默认编码)
    
  • 查询
    1.查看数据库输出字符集变量character_set_databasename与终端编码是否一致

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值