MySQL数据库中文乱码问题

MySQL数据库中文乱码问题

在中文环境下,MySQL中文乱码是个常见而又棘手的问题。本文在不涉及后台程序与服务器连接数据库的情况下,通过配置相关参数,彻底解决数据库中文乱码问题

参考文献

博客:《彻底解决mysql中文乱码》

主要问题

在MySQL里,中文乱码主要体现在以下两个方面

  • select结果中,若存在的中文字符串会乱码显示

  • 通过insert插入中文字符串会报错:ERROR 1366 (HY000): Incorrect string value: ‘\xC6\xF4\xD3\xC3’ for column ‘name’ at row 1

解决办法

本文是使用示例数据库如下所示:

先来解决第一个问题,也是最主要的问题!

  • 第一步

在命令行输入:show create table user;

显示:

这表示相关字段没有设置成默认utf8的编码,这是需要输入SQL语句将相关字段设成默认utf8编码:

alter table user modify name varchar(20) character set utf8 collate utf8_unicode_ci not null default ' ';
alter table user modify sex varchar(255) character set utf8 collate utf8_unicode_ci not null default ' ';
alter table user modify home varchar(255) character set utf8 collate utf8_unicode_ci not null default ' ';
alter table user modify info varchar(255) character set utf8 collate utf8_unicode_ci not null default ' ';
/*具体字段请参考自己的数据表*/

再次输入命令:show create table user;

如果出现下图的结果则表示设置成功

  • 第二步

在命令行输入:show variables like ‘%char%’;

如果出现上图的结果,则表示客户端、服务器端、连接等均成功设置成utf8编码;如果不是上图的结果(一般会出现latin1),则需要做以下设置:

#1.打开数据库配置文件my.init(注1)

#2.在my.init文件中找到并修改成以下

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

#3.重启MySQL服务(注2)

注1:windows中my.init文件的位置
注2:windows下重启mysql的方法

这时,再输入命令,就可以显示如上图的结果了。

至此,我们已经解决select结果中文乱码显示的问题了,如图:

然而,尝试insert插入中文字符串,仍然报错:ERROR 1366 (HY000): Incorrect string value: ‘\xC6\xF4\xD3\xC3’ for column ‘name’ at row 1

  • 第三步

这时,我们分析这个问题,暂时猜测是数据库客户端不支持在utf8字符集中插入中文字符。因此,我们尝试一下改成gbk是否可以。

在命令行输入:set names gbk;

此时默认字符显示如下图:

此时再来insert,发现已经没有问题。

navicat乱码问题

通过以上设置,已经彻底解决中文乱码问题。但是,有些人通过navicat连接数据库后,发现仍然出现中文乱码。这是可以分析:单纯是navicat配置问题了。

解决中文乱码,navicat通常需要以下配置:

  • 1.在连接属性中,勾选使用MySQL字符集,使其默认**65001(UTF-8)**编码

  • 2.数据库属性设置成以下选项

设置好以上两项后,navicat中文乱码问题就解决了。

总结

虽然具体问题仍然没有找出来,但是棘手已久的问题总算解决了。

此外,如果在程序中连接了数据库,还需要对程序字符集、服务器字符集等进行设置,具体请看(coming soon)!

相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页