mysql中常用字符集utf8mb3、utf8mb4、gbk的区别和常用排序规则的区别

在 MySQL 中,字符集(Character Set)和排序规则(Collation)是数据库存储和查询文本数据时的重要概念。了解不同字符集和排序规则的差异,有助于在创建数据库时选择最适合的设置。下面将详细描述 utf8mb3、utf8mb4、gbk 这三种字符集的区别,以及 utf8mb4_general_ci、utf8mb4_unicode_ci、utf8mb4_bin、utf8mb4_0900_ai_ci 这四种常用排序规则的区别。

1. 字符集的区别:utf8mb3、utf8mb4 和 gbk

utf8mb3(也称为 utf8)

  • 定义:utf8mb3 是 MySQL 中旧版的 UTF-8 编码字符集,常被简称为 utf8,实际上它支持最多 3 字节的字符编码
  • 支持的字符:只能支持 Unicode 字符集中最多 3 字节的字符,即 U+0000 到 U+FFFF 范围内的字符(不包括一些表情符号、某些生僻字和其他 4 字节字符)。
  • 限制:utf8mb3 不能处理所有 Unicode 字符,尤其无法存储表情符号和某些罕见的字符(例如,某些表情符号、少数民族语言的字符等需要 4 字节的字符)。
  • 用途:适用于大多数欧洲和亚洲语言字符,但不适合需要处理表情符号或其他 4 字节字符的场景。

utf8mb4

  • 定义:utf8mb4 是对 utf8mb3 的扩展,支持最大 4 字节的字符编码,可以存储所有 Unicode 字符,包括表情符号和其他 4 字节字符(如某些生僻字和符号)。
  • 支持的字符:可以表示整个 Unicode 字符集的字符,包括从 U+0000 到 U+10FFFF 的字符。
  • 优势:utf8mb4 是当前推荐的字符集,因为它支持所有 Unicode 字符,比 utf8mb3 更加完备,尤其在处理多语言和表情符号时非常有用。
  • 用途:当需要支持表情符号、某些特殊字符或任何 Unicode 字符时,应该选择 utf8mb4。

gbk

  • 定义:gbk 是一种中文字符集,广泛用于简体中文字符的存储,能够支持大部分的汉字字符。gbk 是对 GB2312 和 GB18030 的扩展,支持更多的汉字字符和一些标点符号。
  • 支持的字符:支持简体中文和繁体中文字符,以及部分标点符号。gbk 编码并不支持所有 Unicode 字符,尤其是无法表示一些多字节的国际字符(例如,某些表情符号和西欧字符)。
  • 限制:对于不涉及中文字符集的多语言应用,gbk 可能会出现兼容性问题,尤其是在需要跨平台或跨语言支持时,utf8mb4 更为通用。
  • 用途:gbk 适用于只需要存储中文字符的场景,但不适合需要支持多种语言或 Unicode 字符的场景。

2. 排序规则的区别:utf8mb4_general_ci、utf8mb4_unicode_ci、utf8mb4_bin 和 utf8mb4_0900_ai_ci

utf8mb4_general_ci

  • 比较方式:utf8mb4_general_ci 是最常用的 utf8mb4 字符集排序规则,它提供了不区分大小写(Case Insensitive)和不区分重音符号(Accent Insensitive)的比较。
  • 特点:
    • 按字典顺序比较字符,但它并不严格遵循 Unicode 标准,某些字符比较可能不完全正确。
    • 性能较好,因为其比较规则比较简单。
  • 适用场景:适用于需要进行简单文本比较的应用,特别是在处理英文和其他不涉及特殊字符的语言时。
  • 缺点:对于某些语言的特殊字符(如西班牙语的重音符号、德语的变音符号等)可能处理不准确。

utf8mb4_unicode_ci

  • 比较方式:utf8mb4_unicode_ci 是基于 Unicode 排序标准的排序规则,按字典顺序进行不区分大小写(Case Insensitive)比较。
  • 特点:
    • 它比 utf8mb4_general_ci 更精确,特别是在多语言环境中,遵循 Unicode 标准进行字符排序。
    • 相较于 utf8mb4_general_ci,它提供了更好的字符比较,能够正确处理不同语言中的特殊字符(如法语的重音符号、德语的变音符号等)。
  • 适用场景:适用于多语言环境中需要遵循 Unicode 排序标准的应用。
  • 缺点:性能稍差,因为它的比较规则更加复杂,处理多语言和特殊字符时需要更多的计算。

utf8mb4_bin

  • 比较方式:utf8mb4_bin 是二进制比较规则,不进行任何字符级转换,直接按字节比较(区分大小写,区分重音符号)。
  • 特点:
    • 严格按照字符的二进制值进行比较,任何字符的差异都会导致比较结果不同。
    • 这是最精确的排序规则,因为它对字符的每一个字节都进行严格比较。
  • 适用场景:适用于对字符精确匹配要求极高的场景,如密码存储、哈希值比较等。
  • 缺点:对用户来说不够直观,因为它不进行语言级的排序(如忽略大小写),这可能会导致一些非预期的比较结果。

utf8mb4_0900_ai_ci

  • 比较方式:utf8mb4_0900_ai_ci 是 MySQL 8.0 引入的排序规则,基于 Unicode 9.0 标准,ai 表示不区分重音符号(Accents Insensitive),ci 表示不区分大小写(Case Insensitive)。
  • 特点:
    • 它严格遵循 Unicode 9.0 标准,在比较字符时,不区分大小写和重音符号
    • 提供了更为准确的排序和比较,尤其是在多语言和跨文化应用中。
  • 适用场景:适用于需要遵循 Unicode 9.0 排序规则的应用,特别是多语言环境中,能正确处理各种语言的特殊字符。
  • 缺点:相对于其他排序规则,它的性能较低,特别是在大规模数据比较时。

总结

字符集/排序规则特点适用场景
utf8mb3支持 3 字节字符,不能存储 4 字节字符(如表情符号)。适用于大多数欧洲和亚洲语言,但不支持表情符号等 4 字节字符。
utf8mb4支持 4 字节字符,能存储所有 Unicode 字符,包括表情符号。推荐使用,尤其是需要存储表情符号或多种语言字符的场景。
gbk主要支持简体中文字符,无法表示所有 Unicode 字符。适用于中文字符的存储,不适合多语言或国际化应用。
utf8mb4_general_ci不区分大小写和重音符号,性能较好,排序规则简单。适用于简单文本比较,英文和不涉及特殊字符的应用。
utf8mb4_unicode_ci按 Unicode 标准排序,不区分大小写和重音符号,处理复杂字符时更精确。适用于多语言应用,特别是需要遵循 Unicode 排序规则的情况。
utf8mb4_bin按字节值进行严格比较,区分大小写和重音符号。适用于精确匹配要求高的场景,如密码、哈希值等。
utf8mb4_0900_ai_ci基于 Unicode 9.0 标准,不区分大小写和重音符号。适用于需要 Unicode 9.0 排序规则的多语言应用,特别是跨文化环境。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

追风少年浪子彦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值