原文连接:关于Navicat和MYSQL字符集不统一出现的中文乱码问题mysql
最近遇到一串关于MYSQL中文乱码的问题,问题背景是这样的:linux
在此以前,服务器上安装好MySQL以后就立马从新配置了字符集为utf8,以后用Navicat进行数据导入,发现中文的字符导入以后全是乱码,而后查论坛很sql
快经过如下方式解决了:创建链接时编码选择UTF-8,把使用MYSQL字符集以前的勾勾去掉。数据库
数据库的属性设置为:vim
OK,Navicat里的中文字符正常了。因而 ,开心的进行数据导入,一切感受完美~服务器
接下来我在命令行采用最简单的mysqldump方法进行备份,备份成功,由于都是测试数据,我顺手打开备份好的文件一看,又是乱码!以后命令行直接进到数据库查询,测试
果真查询结果也是乱码!我用命令行建了一个测试表,插入中文数据,查表,显示正确;Navicat查表,乱码。这是什么状况~明明两边都是UTF-8编码
编码方式。.net
心里一万只羊驼奔过...命令行
OK 咱们如今来一步步排查问题:
首先,打开/etc/my.cnf 文件查看是否字符集配置正确,果真,在[mysqld] 下错写成了default-character-set=utf8
正确的配置方式:
先备份一下my.cnf文件,而后 vim /etc/my.cnf 插入如下几行
[client]
default-character-set=utf8
[mysqld]
character-set-server=utf8 #注意这行不要写成 default-character-set=utf8
[mysql]
no-auto-rehash
保存以后service mysqld restart 启动成功 ,进行以前的数据测试,乱码问题依然存在。能两边的字符集真的不同呢?
查了一些资料才知道:只要涉及到文字的地方,就会存在字符集和编码方式。对于MySQL数据库系统而言,用户从MySQL client端敲入一条sql语句,经过TCP/IP传递给
MySQL server进程,到最终存入server端的文件,每一个环节都涉及到字符存储。涉及到字符存储的地方,就涉及到字符集编码。
咱们就用 show variables like'char%';和 showvariables like 'collation_%';来查看一下:
分别在MYSQL、Navicat中运行命令;
两边有些字符集和校对的系统变量是不一样的。
至此,我找到了问题的关键。
最后咱们去解决问题,我有两种方法:
①咱们以MySQL配置为准。在Navicat 中运行如下命令:
setcharacter_set_client= utf8;
setcharacter_set_connection =utf8 ;
setcharacter_set_results=utf8 ;
再查看字符集,两边就一致了。进行测试,乱码问题解决。
②保证MySQL字符集配置正确的前提下,在navicat的链接属性中勾选使用MYSQL字符集。
最后才发现本身把本身坑了。
无论怎样,最后问题解决了,又能够愉快的工做了。
如下是我参考的一些文章:
http://www.douban.com/note/268110263/?type=like
http://www.linuxidc.com/Linux/2015-04/116550.htm