[转]关于Navicat和MYSQL字符集不统一出现的中文乱码问题

Posted jason_zhangz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[转]关于Navicat和MYSQL字符集不统一出现的中文乱码问题相关的知识,希望对你有一定的参考价值。

 

原文链接:关于Navicat和MYSQL字符集不统一出现的中文乱码问题

 

最近遇到一串关于mysql中文乱码的问题,问题背景是这样的:

在此之前,服务器上安装好MySQL之后就立马重新配置了字符集为utf8,之后用Navicat进行数据导入,发现中文的字符导入之后全是乱码,然后查论坛很

快通过以下方式解决了:建立连接时编码选择UTF-8,把使用MYSQL字符集之前的勾勾去掉。

 技术分享

 

数据库的属性设置为:

技术分享

 

OK,Navicat里的中文字符正常了。于是 ,开心的进行数据导入,一切感觉完美~

接下来我在命令行采用最简单的mysqldump方法进行备份,备份成功,因为都是测试数据,我顺手打开备份好的文件一看,又是乱码!之后命令行直接进到数据库查询,

果然查询结果也是乱码!我用命令行建了一个测试表,插入中文数据,查表,显示正确;Navicat查表,乱码。这是什么情况~明明两边都是UTF-8

编码方式。

内心一万只羊驼奔过...

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

以上是关于[转]关于Navicat和MYSQL字符集不统一出现的中文乱码问题的主要内容,如果未能解决你的问题,请参考以下文章

转 navicat for mysql 的 删减表 和清空表

mysql将一个以逗号分隔的数字字符串转出数字

MySQL-pymysql模块

MySQL-pymysql模块

navicat for mysql运行sql文件出错

[转]mysql如何利用Navicat 导出和导入数据库