携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第27天,点击查看活动详情
前言
上篇我们学习了MySQL中的字符集(一)。有兴趣的小伙伴可以阅读(# MySQL学习-字符集(一))。
下面我们继续学习MySQL中的字符集。
字符集
服务器级别
character_set_server:服务器级别的字符集。我们可以在启动服务器程序时通过启动选项或服务器程序运行过程中使用set语句修改这两个变量的值,比如可以在配置文件etc/my.cnf中这样写:
character-set-server=utf8
collation-server=utf8_unicode_ci
数据库级别
character_set_database:当前数据库的字符集,可以在创建和修改数据库的时候指定字符集和比较规则,语法如下:
CREATE DATABASE 数据库名
[[DEFAULT] CHARACTER SET 字符集名称]
[[DEFAULT] COLLATE 比较规则名称]
ALTER DATABASE 数据库名
[[DEFAULT] CHARACTER SET 字符集名称]
[[DEFAULT] COLLATE 比较规则名称]
以上语法中的DEFAULT可以省略,比如:
CREATE DATABASE db
CHARACTER SET utf8
COLLATE utf8_unicode_ci;
表级别
可以在创建和修改表的时候指定表的字符集和比较规则,语法如下:
CREATE TABLE 表名(列的信息)
[[DEFAULT] CHARACTER SET 字符集名称]
[[DEFAULT] COLLATE 比较规则名称]
ALTER TABLE 表名(列的信息)
[[DEFAULT] CHARACTER SET 字符集名称]
[[DEFAULT] COLLATE 比较规则名称]
以上语法中的DEFAULT也可以省略,比如:
CREATE TABLE tb(id INT)
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
列级别
对于存储字符串的列,同一个表中的不同列也可以有不同的字符集和比较规则,我们在创建和修改列定义的时候可以指定该列的字符集和比较规则,语法如下:
CREATE TABLE 表名(
列名 字符串类型 [CHARACTER SET 字符集名称]
[COLLATE 比较规则名称],
其他列
)
ALTER TABLE 表名 MODIFY COLUMN 列名 字符串类型
[CHARACTER SET 字符集名称] [COLLATE 比较规则名称]
比如修改表tb中的列id的字符集和比较规则:
ALTER TABLE tb MODIFY COLUMN `id` INT
CHARACTER SET utf8
COLLATE utf8_unicode_ci
字符集和比较规则
utf8和utf8mb4
utf8字符集表示一个字符需要使用1-4个字节,但是我们常用的字符使用1-3个字节就可以表示了,而字符集表示一个字符所用的最大字节长度,在某些方面会影响系统的存储和性能,所以MySQL的设计者定义了两个概念:
- utf8mb3:阉割过的utf8字符集,只使用1-3个字节表示字符。
- utf8mb4:正宗的utf8字符集,使用1-4个字节表示字符,
在MySQL中utf8是utf8mb3的别名,所以之后在MySQL中提到utf8就意味着使用1-3个字节表示一个字符。如果有使用4字节编码一个字符的情况,比如存储一些表情,那么可以使用utf8mb4。
查看字符集
SHOW CHARSET;
可以查看MySQL支持的字符集。
比较规则
MySQL一共支持41种字符集,其中的Default collation列表示这种字符其中一种默认的比较规则,里面包含着该比较规则主要用于那种语言,比如:utf8_polish_ci表示以波兰语的规则比较,utf8_general_ci是一种通用的比较规则。后缀表示该比较规则是否区分语言中的重音,大小写,具体如下:
| 后缀 | 英文释义 | 描述 |
|---|---|---|
| _ai | acccent insensitive | 不区分重音 |
| _as | acccent sensitive | 区分重音 |
| _ci | case insensitive | 不区分大小写 |
| _cs | case sensitive | 区分大小写 |
| _bin | binary | 以二进制方式比较 |
其中列Maxlen,代表该种字符集表示一个字符最多需要几个字节。
| 字符集名称 | Maxlen |
|---|---|
| ascill | 1 |
| latin1 | 1 |
| gb2312 | 2 |
| gbk | 2 |
| utf8 | 3 |
| utf8mb4 | 4 |
查看比较规则
查看gbk的比较规则
SHOW COLLATION LIKE `gbk%`;
今天先学习到这里,明天继续。