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%';
个人微信公众号,欢迎扫码订阅,精彩内容,每天分享:
默认情况下的编码方式为:
配置文件位置: /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
内容如下:
修改之后查看如下:
经过上述的修改,就不会出现乱码,如下: