数据库原理与应用 第 4 章 · 第二节
课程 › 第 4 章 › 第二节 字符集校对规则大小写 版式
第 4 章 数据库的创建和管理 · 第二节

字符集与校对规则

字符集管怎样存储,校对规则管怎样比较和排序
本 节 知 识 点
  1. 07字符集概述
  2. 08校对规则
  3. 09校对规则与大小写
07
第 4 章 · 第二节 · 课件第 13、14 页合并重做

字符集概述

字符集决定文字怎样存储,校对规则决定怎样比较。

4.2 MySQL 数据库的字符集课件第 13、14 页合并

字符集概述

  • 字符集(Charset)决定文字怎样存储,每个字符对应一个编码
  • 校对规则(Collation)决定同一字符集中的字符怎样比较和排序
  • 一个字符集至少对应一种校对规则,两个不同的字符集不能有相同的校对规则,每个字符集都有一个默认的校对规则
查看支持的字符集
SHOW CHARACTER SET;
或者查询系统表
USE information_schema;
SELECT * FROM CHARACTER_SETS;
例:以 utf8 开头的字符集
CharsetDescriptionDefault collationMaxlen
utf8mb3UTF-8 Unicodeutf8mb3_general_ci3
utf8mb4UTF-8 Unicodeutf8mb4_0900_ai_ci4

重 点

MySQL 8.0 默认的字符集是 utf8mb4,一个字符最多占 4 个字节,能存所有的汉字和表情符号。

实 验

实验 1-3 查看字符集

08
第 4 章 · 第二节 · 课件第 15、16、17 页合并重做

校对规则

校对规则名的后缀说明是否区分大小写。

4.2 MySQL 数据库的字符集课件第 15 至 17 页合并

校对规则

查看校对规则
SHOW COLLATION;
SHOW COLLATION
WHERE Charset = 'utf8mb4';
或者查询系统表
SELECT *
FROM information_schema.COLLATIONS
WHERE CHARACTER_SET_NAME = 'utf8mb4';
校对规则名的后缀
后缀含义
_ci不区分大小写(case insensitive)
_cs区分大小写(case sensitive)
_bin按字符的编码值比较(binary)
_ai不区分重音(accent insensitive)

utf8mb4 默认的校对规则是 utf8mb4_0900_ai_ci:0900 表示按 Unicode 9.0 的规则比较,ai 表示不区分重音,ci 表示不区分大小写。

09
第 4 章 · 第二节 · 课件第 18、19 页合并重做

校对规则与大小写

_ci 不区分大小写,_bin 按编码值比较。

4.2 MySQL 数据库的字符集课件第 18、19 页合并

校对规则与大小写

同样的两行数据 Tom 和 tom,表的校对规则不同,查询的结果也不同。

utf8mb4_general_ci:不区分大小写
CREATE TABLE users1 (
  name VARCHAR(50)
) COLLATE utf8mb4_general_ci;
INSERT INTO users1
VALUES ('Tom'), ('tom');
SELECT * FROM users1
WHERE name = 'tom';
  • 查出 Tom 和 tom 两行
utf8mb4_bin:按编码值比较
CREATE TABLE users2 (
  name VARCHAR(50)
) COLLATE utf8mb4_bin;
INSERT INTO users2
VALUES ('Tom'), ('tom');
SELECT * FROM users2
WHERE name = 'tom';
  • 只查出 tom 一行

排序时也不同。按 _bin 排序,大写字母排在小写字母前面,因为 A 的编码是 65,a 的编码是 97。

试一试换一种校对规则,看比较和排序

四个单词:banana、Apple、Banana、apple
校对规则
ORDER BY 排序的结果'Tom' = 'tom'

实 验

实验 1-5 校对规则与大小写

保山学院·人工智能教研室·曹鼎鼎