MySQL入门教程(25)字符集、排序规则与大小写问题

TangLu MySQL 2020-02-09 3545 0

一、MySQL字符集说明

字符集用来定义数据在数据库中的格式,在MySQL5.7或之前版本中默认的字符集是latin1,其它常见的字符集有UTF8、UTF8MB4、GBK、ASCCI等。而每种字符集有一个与该字符集对应的默认校对规则(也叫排序规则),校对规则的名字以字符集名开始并以_ci(不区分字段数据大小写)或_cs(区分字段数据大小写)或_bin(二进制,区分字段数据大小写)结束。比如utf8字符集默认校对规则是utf8_general_ci。字符集和校对规则根据级别分为服务器级、数据库级、表级和会话级,低级默认继承上级的设置。保证不乱码的主要思想就是客户端与服务器端字符集统一,库表字符集统一,浏览器字符集统一,程序字符集统一


· MySQL字符集相关参数

character_set_server:实例级别的默认字符集设置,通常配置它即可

collation_server:默认的字符集的排序规则

character_set_database:库级别的默认字符集,可不配置

character_set_system:系统级别的默认字符集设置,可不配置

mysql > show variables like "character%";


· 查看当前MySQL所支持的字符集以及当前所使用的字符集

mysql > show character set;


二、MySQL字符集修改方法

· 使用set names语句临时修改字符集

mysql > set names utf8mb4;


· 导入数据库文件时指定默认字符集

mysql -uroot -p --default-character-set=latin1 testdata <testdata.sql


· 在创建数据库或者表的时候指定字符集和校对规则

mysql > CREATTE DATABASE databasename DEFAULT CHARACTER SET UTF8 DEFAULT COLLATE utf8_general_ci;


· 在my.cnf配置文件里指定默认字符集

cat /etc/my.cnf
[client]  
default-character-set=utf8mb4  
[mysqld]   
character-set-server=utf8mb4   
skip-character-set-client-handshake=1  #客户端也使用服务端的字符集,不用再单独为客户端做设置

mysql > set global character_set_server=utf8mb4;  #全局临时设置


· 对于已经存在的表格修改字符集时需要额外的CONVERT操作将以前的数据进行转换

#下面的语句执行后虽然将表字符集修改为UTF8MB4,但是历史数据字符集并不会修改
ALTER TABLE emoji_test CHARSET utf8mb4;

#修改整张表字符集的做法
ALTER TABLE emoji_test CONVERT TO CHARSET utf8mb4;

评论