Linux下MySQL出现乱码的解决方法以及如何设置编码方式

开发环境

Cent OS 7.0;
MySQL:Server version: 5.6.33 MySQL Community Server (GPL)

最新版:Server version: 5.7.19 MySQL Community Server (GPL) 请看最后补充内容!!!

注意版本,不同版本之间修改的方式是会略有不同!!!

错误重现

首先我已经确保了前端界面传入到后台服务器的编码没有问题!Tomcat的编码方式已经改成了UTF8!(可以通过调试的方式,在后端代码传入参数的时候查看是否有乱码!)

这里写图片描述

但是传入到数据库中却出现了乱码的问题!创建表的时候使用的编码方式是:utf8 -- UTF-8 Unicode

乱码表如下:

这里写图片描述

这些个 ‘?’就是中文乱码的情况。

问题分析

MySQL创建数据库时指定编码很重要,很多开发者都使用了默认编码,安装了之后不会再去设置编码的问题(当然可能我很初级的原因),乱码问题可是防不胜防。

网页数据一般采用UTF8编码,而数据库默认为latin1 。我们可以通过修改数据库默认编码方式为UTF8来减少数据库创建时的设置,也能最大限度的避免因粗心造成的乱码问题。

我们遵循的标准是,数据库,表,字段和页面或文本的编码要统一起来,我们可以通过命令查看数据库当前编码:

mysql> SHOW VARIABLES LIKE 'character%'; 

这里写图片描述

这是在出现乱码的时候显示的内容,发现很多对应的都是 latin1,我们的目标就是在下次使用此命令时latin1能被UTF8取代。

问题解决

* 1、第一阶段:*

在mysql控制台通过编码命令进行设置:

SET character_set_client = utf8; 
SET character_set_connection = utf8; 
SET character_set_database = utf8; 
SET character_set_results = utf8; 
SET character_set_server = utf8; 

然后 mysql> SHOW VARIABLES LIKE 'character%'; 你可以看到全变为 utf8 。

但是,这只是一种假象。此种方式只在当前状态下有效,当重启数据库服务后失效。 自己可以尝试一下!

这也是网上很多的解决方法,不见效果,自己当时也尝试了很多次,不成功!这里提出来,希望大家不要采坑!

* 2、第二阶段:*

如何正确的修改,我们只有修改my.cnf(一般都是在/etc/my.cnf目录下)文件,

从my.cnf下手(标签下没有的添加,有的修改)

补充:

Server version: 5.7.17 MySQL Community Server (GPL)版本中,配置文件的位置是:/etc/mysql/mysql.conf.d/mysqld.cnf

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

以上3个section都要加default-character-set=utf8,平时我们可能只加了mysqld一项。

注意:上边的配置需要根据具体的mysql版本,不同的mysql版本可能不包含上述的三个section,也没有必要全部都设置,平时我们可能只加了mysqld一项。

例如我的配置文件和修改之后的效果(注意我的mysql版本):

这里写图片描述

我的这个my.cnf文件只有mysqld 这个section,因此可以直接加上default-character-set=utf8 即可。

如果,你的配置文件含有client、mysql 标签的话,可以在下边加入,例如下边的配置示例:

这里写图片描述

修改之后,然后重启mysql服务:

service mysqld restart

然后登入mysql控制台查看:

这里写图片描述

编码已经变成utf8,插入一条数据查看结果是否正确:

这里写图片描述

到此为止!编码的问题已经解决!


番外话:

但是有一个值得注意的是,MySQL的一些版本(Server version: 5.6.27-log Source distribution)

这里写图片描述

如果在创建数据库的时候,编码方式选择的utf8,例如下边:

这里写图片描述

正常的使用却没有出现任何的编码问题,进入mysql控制台,查看编码:

可以看到下边两个是utf8的:

| character_set_database   | utf8 
| character_set_server     | utf8   

因此,在进行开发的时候不妨先通过下边的命令确认具体的编码之后,再去开发,以免出现编码的问题:

mysql> show variables like'%char%';

个人微信公众号,欢迎扫码订阅,精彩内容,每天分享:

这里写图片描述



最新版:Server version: 5.7.19 MySQL Community Server (GPL) 请看最后补充内容!!!

默认情况下的编码方式为:

这里写图片描述

配置文件位置: /etc/my.cnf

修改方式:

1、在[client]字段里加入default-character-set=utf8,如下:

[client]
default-character-set=utf8

2、在[mysqld]字段里加入character-set-server=utf8,如下:

[mysqld]
character-set-server=utf8

3、在[mysql]字段里加入default-character-set=utf8,如下:

[mysql]
default-character-set=utf8

默认情况下,我只修改了[mysqld],修改后的/etc/my.cnf内容如下:

这里写图片描述

修改之后查看如下:

这里写图片描述

经过上述的修改,就不会出现乱码,如下:

这里写图片描述

  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

徐刘根

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值