最近因为mysql乱码问题,花了很多时间,看了网上很多文章。今天将自己遇到的和看到的文章上面的情况整理一下,为了以后查看方便
各编码的关系
因为编程各种规则基本都是外国人指定的,所以外国人写的东西无需对编码进行转换,默认的就是ISO-8859-1;到了中国,就涉及到本土化的问题,中文编码应当是GBK,这是本地化的编码。
而各种标准、各种浏览器一般用的都是ISO-8859-1,所有就造成了两种编码之间的转换。所以后来出现了UTF8,来解决各种编码问题。UTF8基本上包含了地球上所有的可见字符,十分强大。但不幸的是,各种标准并没有按照这一编码来制定,而依然沿用以前的做法。所以,解决各种乱码问题,就成了中国程序员的必不可少的技能之一。
下面是各种编码出现的原因:
IDE环境造成的乱码
目前java编码工具主要就是eclipse和idea,其中idea所有默认编码都是utf-8,所以基本不会出现乱码的情况。
eclipse为了适应中国人编码习惯,当你点击目录中的src,然后点击file->Properties->Resources,你会看到,TextFile Encoding默认是GBK。为了下次不再因为这个问题产生乱码,记得创建文件夹以后就配置一下src的encodeing,还是刚刚的那个路径,改成UTF-8就行了。
POST和GET方法传递参数造成的乱码
可以参考这篇文章:http://www.roobtyan.cn/index.php/2018/04/14/postget_fang_fa_luan_ma_jie_jue_fang_an/
数据库编码格式导致的(mysql)
(2)mysql乱码主要是因为数据库编码格式的问题,这里采用修改MySQL配置文件的方式解决:
查看数据库编码:
show variables like '%char%';
我这个是正常的
找到配置文件位置:find / -name my.cnf
修改配置文件 vi 配置文件位置
我本机为:vi /etc/my.cnf
[mysqld]
character-set-server=utf8
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
如下:
然后重启mysql : service mysqld restart
(2)设置之前建的表,查看编码是否是utf-8
show create table 表名;
如果不是,需要改过来:
修改表的编码方式:ALTER TABLE `test` DEFAULT CHARACTER SET utf8;该命令用于将表test的编码方式改为utf8;
修改字段的编码方式:ALTER TABLE `test` CHANGE `name` `name` VARCHAR(36) CHARACTER SET utf8 NOT NULL; 该命令用于将表test中name字段的编码方式改为utf8
(3)我在使用navicat时,连接数据库中,高级选项的编码改成utf-8反而显示为乱码“????”后来修改成自动就显示正常了
参考文章: