1、字符集
1.1、字符集简介
我们知道在计算机中只能存储二进制,那么如何将字符存储到计算机中,这个时候就需要将字符映射称为二进制,将所有字符映射为二进制就需要映射表。建立映射表需要注意:
1、明确哪些字符需要映射为二进制,即界定需要映射的字符范围
2、如何映射,一个字符映射为二进制数据为编码,二进制映射为字符为解码
使用一个概念“字符集”来描述字符范围和编码规则,我们可以自定义字符集
包含字符 'a' 、 'b' 、 'A' 、 'B'
编码规则如下:
采用 1 个字节编码一个字符的形式,字符和字节的映射关系如下:
'a' -> 00000001 (十六进制:0x01)
'b' -> 00000010 (十六进制:0x02)
'A' -> 00000011 (十六进制:0x03)
'B' -> 00000100 (十六进制:0x04)
'bA' -> 0000001000000011 (十六进制:0x0203)
'baB' -> 000000100000000100000100 (十六进制:0x020104)
'cd' -> 无法表示,字符集xiaohaizi不包含字符'c'和'd'
1.2、重要的字符集
由于使用计算机的各个国家比较多,所以不同的人制定出来不同的字符集。这些字符集的字符范围和编码规则个不一样。列举一些常用字符集
ASCII字符集
中共收录了128个字符,包括空格、标点符号、数字、字母、不可见字符。总共128个字符,所以可以使用一个字节进行编码
IS O8859-1字符集
总共收录了256个字符,是在ASCII字符集的基础上扩充了128个西欧字符(德法两国字母),同样可以使用一个字节进行编码。
GB2312字符集
收录了汉字以及拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母。其中收录汉字 6763 个,其他文字符号 682 个。同时这种字符集又兼容 ASCII 字符集,所以在编码方式上显得有些奇怪。
GBK字符集
收录范围上对GB2313进行了扩充,编码上兼容GB2312
utf8字符集
收录地球上所有能想到的字符,而且仍旧不断扩充,这种字符兼容ASCII编码,编码一个字符需要1-4个字节长度。例如
1.3、utf8和utf8mb4
我们上边说 utf8 字符集表示一个字符需要使用 1 ~ 4 个字节,但是我们常用的一些字符使用 1 ~ 3 个
字节就可以表示了。而在 MySQL 中字符集表示一个字符所用最大字节长度在某些方面会影响系统
的存储和性能,所以设计MySQL 的大叔偷偷的定义了两个概念:
utf8mb3 :阉割过的 utf8 字符集,只使用 1 ~ 3 个字节表示字符。
utf8mb4 :正宗的 utf8 字符集,使用 1 ~ 4 个字节表示字符。
有一点需要大家十分的注意,在 MySQL 中 utf8 是 utf8mb3 的别名,所以之后在 MySQL 中提到 utf8 就意味着使用 1~3 个字节来表示一个,utf8或者utf8mb4都是Unicode字符集,utf8包含了部分Unicode字符,utf8mb4是更大的utf8字符集。
1.4、排序规则
排序规则决定了字符的排序和比较方式,常见的排序规则
-
utf8mb4_unicode_ci: 基于 Unicode 的排序规则,不区分大小写。
-
utf8mb4_general_ci: 一种较老的排序规则,不区分大小写,但在某些语言中的排序可能不准确。
-
utf8mb4_bin: 基于二进制值的排序规则,区分大小写。
1.5、Mysql字符集常见操作
1、查看支持的字符集
SHOW CHARACTER SET;
2、设置字符集
- 服务器级别:
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
- 数据库级别
CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
- 表级别
CREATE TABLE mytable (id INT PRIMARY KEY,name VARCHAR(100)
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
- 列级别
CREATE TABLE mytable (id INT PRIMARY KEY,name VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
);