utf8mb4_bin、 utf8mb3_general_ci 、utf8mb4_0900_ai_ci 这几个有什么区别
我看项目上 用户信息部分字段用了utf8mb4_bin
这几个都是 MySQL 中的字符集和排序规则(Collation)选项,主要区别体现在字符编码、排序规则和对字符的处理方式上。
1. utf8mb4_bin
-
字符集:
utf8mb4
表示使用 4 字节的 UTF-8 编码,可以支持所有 Unicode 字符,包括一些特殊字符(如表情符号)。 -
排序规则:
bin
表示“二进制排序”,即按照字符的字节值进行排序。字符的比较是逐字节的,不考虑字符的语言或大小写规则。- 特点:大小写敏感,且完全基于字符的字节值比较,不做任何归类处理。
2. utf8mb3_general_ci
-
字符集:
utf8mb3
是旧版的 UTF-8 编码,仅支持最多 3 字节来表示字符。它能表示的字符集较少,无法处理所有 Unicode 字符(比如某些表情符号就不能表示)。 -
排序规则:
general_ci
表示“通用不区分大小写”的排序规则。这里的ci
表示“Case Insensitive”(不区分大小写),也就是说在排序和比较时,A
和a
会被视为相同的字符。- 特点:不区分大小写,且一些字符(比如重音符号)可能被认为是相同的字符。适合用于不要求严格排序的场景。
3. utf8mb4_0900_ai_ci
-
字符集:
utf8mb4
,与utf8mb4_bin
一样,支持所有 Unicode 字符。 -
排序规则:
0900
表示 MySQL 8.0 引入的排序规则,ai
表示“Accent Insensitive”(不区分重音符号),ci
表示“不区分大小写”。- 特点:这种排序规则在比较时,不区分大小写,也不区分重音符号。比如
é
和e
会被视为相同的字符,a
和A
也会被视为相同的字符。适合多语言应用,不要求严格的字符顺序比较。
- 特点:这种排序规则在比较时,不区分大小写,也不区分重音符号。比如
总结区别:
utf8mb4_bin
:大小写敏感,比较严格,基于字节值。utf8mb3_general_ci
:不区分大小写,适合常见的应用,但有字符集限制(最多支持 3 字节)。utf8mb4_0900_ai_ci
:不区分大小写,也不区分重音符号,是 MySQL 8.0 及以后的默认排序规则,适合多语言支持,兼容性更好。
在实际选择时,通常会根据以下几个因素来决定:
- 字符集支持:如果需要支持更多的字符(如表情符号),推荐使用
utf8mb4
。 - 大小写和重音符号敏感度:是否需要严格区分大小写或重音符号。
- MySQL 版本:如果是 MySQL 8.0 或更高版本,推荐使用
utf8mb4_0900_ai_ci
,它在多语言支持和兼容性方面有优势。