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

本文详细介绍了MySQL数据库中文乱码的问题及其解决方案。通过调整Navicat客户端和MySQL服务器的字符集配置,确保数据导入和查询时中文字符的正确显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近遇到一串关于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中创建新数据库时指定相同的字符集。具体操作如下: 参考资源链接:[数据库导入错误解决方案:从密码到版本匹配](https://wenku.csdn.net/doc/64534d83ea0840391e7795e0?spm=1055.2569.3001.10343) - 启动Navicat,连接到你的MySQL服务器。 - 在'连接属性'对话框中,找到'高级'标签页。 - 在'字符集'部分,你可以设置数据库连接字符集,确保它原始数据源的字符集一致。如果确定原始字符集是什么,可以联系数据提供者获取该信息。 - 创建新数据库后,为确保数据库中所有表数据都使用正确的字符集,可以在创建表导入数据之前设置全局字符集参数。 - 在SQL编辑器中输入以下命令来设置全局字符集: SET NAMES 'utf8'; SET CHARACTER SET utf8; - 这样设置后,导入数据时就会因为字符集差异导致乱码问题。 如果在导入过程中遇到问题,或者数据量较大时,还应注意调整MySQL的配置文件中`max_allowed_packet`参数的大小,避免因超出设置的最大允许数据包大小而导致导入失败。完成上述设置后,重启MySQL服务使配置生效。 为深入了解字符集相关的更多知识,以及在导入过程中遇到的其他常见问题解决方案,可以参考《数据库导入错误解决方案:从密码到版本匹配》一书,其中详细介绍了这些内容并提供了实用的指导建议。 参考资源链接:[数据库导入错误解决方案:从密码到版本匹配](https://wenku.csdn.net/doc/64534d83ea0840391e7795e0?spm=1055.2569.3001.10343)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值