
在 MySQL 中,字符集和排序规则决定了如何对字符进行比较和排序。utf8mb4_bin 和 utf8mb4_general_ci 是两种常用的排序规则,它们的主要区别在于是否区分大小写以及是否考虑字符的语言特性。下面通过详细案例来帮助你理解这两者的差异。
utf8mb4_bin 排序规则utf8mb4_bin 是一种二进制排序规则,表示比较字符时是基于字符的二进制值进行逐位比较的,完全区分大小写,并且不会做任何的语言或文化特性转换。
假设我们有如下数据:
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",因为它严格区分大小写。
utf8mb4_general_ci 排序规则utf8mb4_general_ci 是一种不区分大小写的排序规则,表示比较字符时会将大小写视为相同,并且会做一些简单的语言处理以适应不同的字符(如重音符号的忽略)。
继续使用之前的 users 表,如果执行以下查询:
SELECT * FROM users WHERE name = 'apple';id | name |
|---|---|
1 | apple |
2 | Apple |
3 | APPLE |
在 utf8mb4_general_ci 排序规则下,查询会匹配到小写的 "apple",大写的 "Apple" 和 "APPLE",因为它不区分大小写。
特性 | utf8mb4_bin | utf8mb4_general_ci |
|---|---|---|
是否区分大小写 | 区分大小写 ('a' ≠ 'A') | 不区分大小写 ('a' = 'A') |
是否考虑字符的文化特性 | 不考虑(直接比较二进制值) | 会忽略重音符号、大小写等语言差异 |
查询结果 | 精确匹配,大小写必须一致 | 大小写不敏感,字符会被统一处理 |
utf8mb4_bin。utf8mb4_general_ci。原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。