第 4 章 · 第二节
主要内容 MySQL 数据库的字符集
引擎讲完了,接下来是最容易踩坑的一块。

重 点
字符集管文字怎么存,校对规则管文字怎么比、怎么排。
打个比方
一个是给每个字发号码牌,一个是按什么规矩让这些号码排队。
想一想
为什么有的系统里,汉字会变成一串问号?
引擎讲完了,接下来是最容易踩坑的一块。

字符集管文字怎么存,校对规则管文字怎么比、怎么排。
一个是给每个字发号码牌,一个是按什么规矩让这些号码排队。
为什么有的系统里,汉字会变成一串问号?
一个字符集配好几种校对规则,其中一种是默认。

查字符集用 SHOW CHARACTER SET,查校对规则用 SHOW COLLATION。
四十一种字符集,真正要认识的只有三个。

| 字符集 | 什么时候用 |
|---|---|
| utf8mb4 | 首选,汉字表情都存得下 |
| utf8 | 老写法,最多三字节 |
| gbk | 只存中文的老系统 |
它写的是一个字最多占几个字节,utf8mb4 是 4,utf8 只有 3。
校对规则太多,一定要加 WHERE 把范围缩小。

直接敲 SHOW COLLATION 会刷出两百多行,屏幕根本翻不完。
| 想看什么 | 怎么写 |
|---|---|
| 全部规则 | SHOW COLLATION |
| 只看某个字符集 | 后面加 WHERE Charset |
这一页四条命令,两条用 SHOW,两条查系统表。

| 写法 | 特点 |
|---|---|
| SHOW COLLATION | 短,随手就能敲 |
| 查 COLLATIONS 表 | 能再筛选、能排序 |
information_schema 是 MySQL 自带的系统库,把服务器的家底都记成了表。
同一件事有两种写法,你更愿意用哪一种?
光 utf8 一个字符集,就挂着二十八种校对规则。

Default 那一列写着 Yes 的,就是这个字符集的默认校对规则。
同一批书,可以按书名排、按作者排、按编号排,书还是那批书。
二十八种规则,差别到底在哪里?
看名字最后那几个字母,就知道它认不认大小写。

| name |
|---|
| Tom |
| tom |
| Apple |
| apple |
默认的 utf8mb4_0900_ai_ci 是 ci,所以 tom 和 Tom 被当成同一个。
建表时选了 ci,查 tom 就会把 Tom 一起查出来。

general_ci 不区分大小写,两条记录都算匹配。
要让大小写真正区分开,把列的校对规则换成 cs 或者 bin。