一、字符集介绍
字符集用来定义数据在数据库中的格式,在MySQL中默认的字符集是latin1,其它常见的字符集有UTF8、UTF8MB4、GBK、ASCCI等,每种字符集有一个与该字符集对应的默认校对规则,以字符集名开始,以_ci(不区分字段数据大小写)、_cs(区分字段数据大小写)或_bin(二进制,区分字段数据大小写)结束,比如utf8字符集默认校对规则是utf8_general_ci。字符集和校对规则根据级别分为服务器级、数据库级、表级和会话级,低级默认继承上级的设置。
二、查看MySQL所支持的字符集以及当前所使用的字符集
mysql > show character set; #查看当前服务支持的字符集
mysql > show variables like "character%";
二、修改字符集解决MySQL中文乱码的办法
方法1:使用set names语句临时修改字符集
mysql > show create database databasename
mysql > show create table tablename
mysql > set names utf8mb4;
方法2:导入数据库文件时指定默认字符集
mysql -uroot -p --default-character-set=latin1 testdata
方法3:在创建数据库或者表的时候指定字符集和校对规则。这样数据库里的表就不用单独设置了,会继承库的设置
mysql > CREATTE DATABASE databasename DEFAULT CHARACTER SET UTF8 COLLATE utf8_general_ci; #设置字符集的写法有很多种
方法4:在my.cnf配置文件里指定默认字符集(永久生效,可以把当前全局设置一起修改避免重启)
vi /etc/my.cnf
[client] #客户端字符集
default-character-set=utf8mb4
[mysqld] #服务端字符集
# default-character-set=latin1 #5.1之前版本
character-set-server=utf8mb4 #utf8mb4是utf8的升级
skip-character-set-client-handshake=1 #客户端也使用服务端的字符集,不用再单独为客户端做设置
mysql > set global character_set_server=utf8mb4; #全局临时设置
保证不乱码的主要思想:客户端与服务器端字符集统一,库表字符集统一,浏览器字符集统一,程序字符集统一