文章目录
- MYSQL字符集
- MYSQL默认字符集
- MySQL常见字符集
- MYSQL校对规则
- 校对规则总结
MYSQL字符集
UTF(Unicode Tranformation Format)是Unicode字符集规范的其中一个编码方式。
各字符编码详解可参考:字符编码发展历史
MYSQL默认字符集
- 5.7版本及之前:默认字符集为latin1(ISO-8859-1)
- 8.0版本及之后:默认字符集为utf8mb4
MySQL常见字符集
字符集 | 字符的字节数 | 描述 | 适用场景 |
---|---|---|---|
ascii | 1 | 最基本的字符集 只包含英文字母、数字和一些特殊字符 | 适用于只需要支持英文字母、数字和一些特殊字符的数据库应用 |
latin1 | 1 | 较为简单的字符集 支持256个拉丁字符 | 适用于只需要支持基本拉丁字符集的数据库应用,如英文等 |
utf8mb3 | <=3 | 较早的字符集 支持大部分常见的Unicode字符,但不包含所有的特殊字符和表情符号 | 适用于少数特殊字符和表情符号的数据库应用,对存储空间要求较低的情况。 |
utf8mb4 | <=4 | 最常用的字符集 支持存储和处理大部分常见的Unicode字符,包括表情符号和特殊字符 | 适用于多语言环境,包括处理中文、日文、韩文等语言的数据库应用 |
utf16 | 2 or 4 | 用于存储Unicode字符的字符集 每个字符使用2个或4个字节进行存储 | 适用于存储较大的字符集,特别是包含一些生僻字符的数据库应用 |
utf32 | 4 | 用于存储Unicode字符的字符集 每个字符使用4个字节进行存储。 | 适用于存储较大的字符集,特别是对字符存储空间要求较高的情况 |
MYSQL校对规则
MySQL中的校对规则(Collation)决定了如何对比和排序字符数据。校对规则是在数据库、表和列级别指定的。
校对规则命名含义:
命名包含 | 英文含义 | 描述 |
---|---|---|
_ci | Case-Insensitive | 不区分大小写。即比较时忽略字符的大小写差异,‘a’ 和 ‘A’ 被认为是相同字符。 |
_cs | Case-Sensitive | 区分大小写。即比较时考虑字符的大小写,‘a’ 和 ‘A’ 被认为是不同字符。 |
_bin | Binary | 二进制排序。对字符进行字节级别的比较,严格区分大小写和字符的二进制表示。 |
_ai | Accent-Insensitive | 不区分重音符号。即比较时忽略字符的重音符号差异,é 和 e 被认为是相同字符。 |
_as | Accent-Sensitive | 区分重音符号。即比较时考虑字符的重音符号,é 和 e 被认为是不同字符。 |
_general | General | 通用排序。使用简单的规则进行排序,通常适用于多种语言,但可能不完全符合所有语言的排序规范。 |
_unicode | Unicode | Unicode 排序。遵循 Unicode 标准进行字符比较,适合多语言环境,提供语言学准确的排序。 |
常见校对规则:
字符集 | 校对规则 | 默认 | 描述 |
---|---|---|---|
utf8mb3 | utf8_general_ci | 是 | 一种通用排序规则,不严格遵循 Unicode 排序标准,忽略大小写和重音符号。适用于大多数语言,但可能导致某些语言的排序不准确。 |
utf8mb3 | utf8_unicode_ci | 遵循 Unicode 排序标准,能更准确地处理不同语言的字符排序,区分大小写,但忽略重音符号。 | |
utf8mb3 | utf8_bin | 基于字节比较的排序规则,区分大小写和字符的二进制表示,比较严格。适用于需要精确字符比较的场景。 | |
utf8mb4 | utf8mb4_general_ci | 是 | 类似于 utf8_general_ci,但支持更多的字符,包括 Emoji 和其他四字节字符。排序规则较为宽松,忽略大小写和重音符号。 |
utf8mb4 | utf8mb4_unicode_ci | 类似于 utf8_unicode_ci,遵循 Unicode 排序标准,并支持四字节字符。适用于多语言环境中的准确排序。 | |
utf8mb4 | utf8mb4_bin | 基于字节比较的排序规则,支持更多的字符,并严格区分大小写和字符的二进制表示。适用于需要精确字符比较的场景。 |
校对规则总结
MySQL 校对规则的作用主要体现在以下几个方面:
- 排序和比较字符:不同的校对规则决定了字符如何排序和比较,影响查询结果。
- 大小写和重音符号的处理:决定字符比较时是否考虑大小写和重音符号。
- 支持多语言和特殊字符:选择合适的校对规则可以支持多语言环境和特殊字符(如 emoji)的正确处理。
- 性能优化:选择适当的校对规则有助于提升性能,尤其是在大规模数据比较和排序时。