前言
在日常开发中经常遇到“乱码”问题,很有可能就是因为对字符集的理解不到位、设置错误造成的,本文主要总结一下MySQL字符集的相关知识,以及如何设置字符集,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教。
什么是字符集
字符集定义了字符以及字符的编码,规定了字符在数据库中的存储格式,比如占用多少空间,支持那些字符等等。
在我们确定了字符集表示字符的范围以及编码规则后,我们还需要比较两个字符的大小,排序规则是指对指定字符集下不同字符的比较规则。
MySQL常用字符集
常见的MySQL字符集主要有以下四种:
字符集 | 长度 | 说明 |
GBK | 2 | 支持中文,但是不是国际通用字符集 |
UTF-8 | 3 | 支持中英文混合场景,是国际通用字符集 |
latin1 | 1 | MySQL默认字符集 |
utf8mb4 | 4 | 完全兼容UTF-8,用四个字节存储更多的字符 |
- 如果系统开发面向国外企业,需要处理不同国家、不同语言,则应该选择utf-8或者utf8mb4。
- 如果只需要支持中文,没有国外业务,则为了性能考虑,可以采用GBK。
MySQL字符集操作
查看字符集
1、查看当前MySQL中支持的字符集
show charset [LIKE 匹配的模式];
2、查看支持的比较规则
SHOW COLLATION [WHERE Charset = 字符集限定条件];
3、查看MySQL数据库中关于字符集的相关设置
show variables like 'character_set%';
修改字符集
1、更改默认字符集
alter database 表名 default character set utf8;
2、在创建表时指定字符集及排序规则
CREATE TABLE 表名 (列的信息)
[[DEFAULT] CHARACTER SET 字符集名称]
[COLLATE 排序规则名称]]
3、修改指定字符集及排序规则
ALTER TABLE 表名
[[DEFAULT] CHARACTER SET 字符集名称]
[COLLATE 排序规则名称]
字符集和排序规则级别
MySQL有4个级别的字符集和比较规则,分别是:
- 服务器级别:可以通过设置
character_set_server
和collation_server
系统变量指定服务器字符集和排序规则; - 数据库级别:给数据库指定字符集和排序规则;
- 表级别:可以指定表的字符集和排序规则;
- 列级别:同一个表中不同的列也可以有不同的字符集和排序规则。
小结
- 字符集指的是某个字符范围的编码规则。
- 排序规则是针对某个字符集中字符比较大小的一种规则。
- 在MySQL中,一个字符集可以有多种排序规则,都有一个默认的排序规则,一个排序规则必须对应一个字符集。