在 MySQL 中,字符集和排序规则决定了如何对字符进行比较和排序。utf8mb4_bin 和 utf8mb4_general_ci 是两种常用的排序规则,它们的主要区别在于是否区分大小写以及是否考虑字符的语言特性。下面通过详细案例来帮助你理解这两者的差异。
1. utf8mb4_bin 排序规则
utf8mb4_bin 是一种二进制排序规则,表示比较字符时是基于字符的二进制值进行逐位比较的,完全区分大小写,并且不会做任何的语言或文化特性转换。
特点:
- 区分大小写:字符 'a' 和 'A' 会被认为是不同的字符。
- 区分字符:例如,"apple" 和 "Apple"(全角字符)也会被认为不同。
示例:
假设我们有如下数据:
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin
);
INSERT INTO users (id, name) VALUES (1, 'apple'), (2, 'Apple'), (3, 'APPLE');执行以下查询:
SELECT * FROM users WHERE name = 'apple';结果:
id | name |
1 | apple |
在 utf8mb4_bin 排序规则下,查询仅会匹配小写的 "apple",因为它严格区分大小写。
2. utf8mb4_general_ci 排序规则
utf8mb4_general_ci 是一种不区分大小写的排序规则,表示比较字符时会将大小写视为相同,并且会做一些简单的语言处理以适应不同的字符(如重音符号的忽略)。
特点:
- 不区分大小写:字符 'a' 和 'A' 会被认为是相同的字符。
- 忽略重音符号:例如,'é' 和 'e' 会被视为相同的字符。
示例:
继续使用之前的 users 表,如果执行以下查询:
SELECT * FROM users WHERE name = 'apple';结果:
id | name |
1 | apple |
2 | Apple |
3 | APPLE |
在 utf8mb4_general_ci 排序规则下,查询会匹配到小写的 "apple",大写的 "Apple" 和 "APPLE",因为它不区分大小写。
总结对比
特性 |
|
|
是否区分大小写 | 区分大小写 ('a' ≠ 'A') | 不区分大小写 ('a' = 'A') |
是否考虑字符的文化特性 | 不考虑(直接比较二进制值) | 会忽略重音符号、大小写等语言差异 |
查询结果 | 精确匹配,大小写必须一致 | 大小写不敏感,字符会被统一处理 |
适用场景:
- 如果你的应用对字符的大小写有严格要求,比如用户登录时输入用户名、密码等,需要精确匹配大小写,可以使用
utf8mb4_bin。 - 如果你希望用户输入时不区分大小写,或者对不同的语言字符做更宽松的处理,可以选择
utf8mb4_general_ci。

















