MySQL 8.0 创建数据库,该如何选择字符集:utf8mb4 还是 utf8mb3

在 MySQL 8.0 中创建数据库时,选择正确的字符集和排序规则非常重要。这关系到你的数据库能否正确存储和处理各种语言的字符,特别是像表情符号(emoji)这样的特殊字符。

1.核心推荐(MySQL 8.0 及以后版本)

• 字符集(Character Set):强烈推荐选择utf8mb4

• 排序规则(Collation):推荐选择utf8mb4_0900_ai_ci(这是 MySQL 8.0 的默认排序规则)。

2.为什么选择utf8mb4而不是utf8mb3(或其他)

2.1 utf8mb3(历史上的utf8

• 含义:使用最多 3 个字节来存储一个字符。

• 覆盖范围:只能存储 Unicode 基本多文种平面(Basic Multilingual Plane,BMP)中的字符,包括绝大部分常用的语言字符(如拉丁字母、西里尔字母、大部分中日韩字符等)。

• 缺点:无法存储需要 4 个字节的 Unicode 字符,最常见的例子就是表情符号(emoji),还有一些不常用的汉字、数学符号、音乐符号等。

• 历史:在 MySQL 5.5.3 之前,MySQL 中的utf8实际上就是utf8mb3的别名。为了避免混淆并明确支持完整的 UTF-8,MySQL 后来引入了utf8mb4并将旧的utf8指向utf8mb3。在 MySQL 8.0 中,utf8mb3被视为遗留字符集。

2.2 utf8mb4

• 含义:使用最多 4 个字节来存储一个字符。

• 覆盖范围:能够存储所有 Unicode 字符,包括 BMP 字符和辅助平面(Supplementary Planes)中的字符(如 emoji 和罕见字符)。

• 优点:提供了最广泛的字符支持,是真正意义上的 UTF-8 实现,能够适应现代互联网应用的需求(尤其是移动端 emoji 的广泛使用)。

• MySQL 8.0 默认值:从 MySQL 8.0 开始,utf8mb4及其对应的排序规则utf8mb4_0900_ai_ci成为了默认的字符集和排序规则,这表明了官方的推荐方向。

2.3 其他字符集(如latin1gbk等)

latin1(ISO 8859-1):主要支持西欧语言,无法存储中文、日文、韩文、emoji 等。

gbk:主要用于简体中文,但不是国际标准,不支持繁体中文、日韩文、emoji 等。

• 这些字符集在需要支持多语言或现代字符(如 emoji)的场景下,兼容性远不如utf8mb4,不推荐在新项目中使用。

3.总结utf8mb3vsutf8mb4的关键区别

特性 utf8mb3(旧称 utf8utf8mb4 最大字节数 3 字节 4 字节 Unicode 范围 基本多文种平面(BMP) 所有 Unicode 字符(包括辅助平面) Emoji 支持 不支持 支持 MySQL 8.0 推荐 不推荐(视为遗留) 强烈推荐(默认值)

4.关于排序规则(Collation)

排序规则定义了字符集内字符的比较和排序方式。它会影响ORDER BYGROUP BY、字符串比较(=,>,<等)以及索引的使用。

utf8mb4_0900_ai_ci:这是 MySQL 8.0 推荐的utf8mb4默认排序规则。

0900:指的是基于 Unicode Collation Algorithm(UCA)9.0.0 版本,提供了更准确、更符合现代语言习惯的排序。

ai:Accent Insensitive(不区分重音符号)。例如,‘a’和‘á’在比较时被视为相等。

ci:Case Insensitive(不区分大小写)。例如,‘a’和‘A’在比较时被视为相等。

• 其他常见排序规则:

utf8mb4_general_ci:较旧的排序规则,排序准确性不如_0900_系列,但可能在某些旧场景下性能稍快(差异通常不显著)。不推荐在新项目使用。

utf8mb4_unicode_ci:比_general_ci更准确一些,但也不如_0900_系列。

utf8mb4_bin:二进制排序。直接比较字符的二进制值,区分大小写、重音,速度最快,但排序结果可能不符合人类语言习惯。

utf8mb4_xxxx_as_csas(Accent Sensitive)表示区分重音,cs(Case Sensitive)表示区分大小写。根据需要选择。

• 特定语言的排序规则(如utf8mb4_ja_0900_as_csfor Japanese)。

5.选择建议

• 对于绝大多数新项目,直接使用 MySQL 8.0 的默认设置:CHARACTER SET utf8mb4COLLATE utf8mb4_0900_ai_ci。这提供了最好的兼容性和最准确的通用排序规则(不区分大小写和重音)。

• 如果你需要区分大小写或重音进行比较和排序,可以选择对应的_cs_as排序规则,例如utf8mb4_0900_as_cs

• 除非有非常明确的理由(如与极旧的系统兼容),否则避免使用utf8mb3

6.如何在创建数据库时指定

CREATE DATABASE your_database_name
CHARACTER SET utf8mb4
COLLATE utf8mb4_0900_ai_ci;

如果你不指定,MySQL 8.0 会自动使用服务器配置的默认值,通常就是utf8mb4utf8mb4_0900_ai_ci

总之,在 MySQL 8.0 中,请优先并放心地选择utf8mb4字符集和utf8mb4_0900_ai_ci(或其他utf8mb4_0900_xx_xx)排序规则,以确保最佳的兼容性和功能性。


原文链接:MySQL 8.0 创建数据库,该如何选择字符集,是选择 utf8mb4 还是 utf8mb3

未经允许不得转载:海淘实验室 » MySQL 8.0 创建数据库,该如何选择字符集:utf8mb4 还是 utf8mb3

赞 (0)

评论 0