MySQL的字符编码

一、MySQL字符编码概述

MySQL的字符编码是指数据库中存储文本数据时所使用的字符集。不同的字符集支持不同的语言和符号。字符集(Character Set)和校对规则(Collation)是MySQL中处理字符数据的两个核心概念。

1. 字符集(Character Set)

  • 定义: 字符集决定了哪些字符可以存储以及它们如何存储。它是一种编码方式,指定了不同字符对应的字节表示。
  • 功能: 确定数据库如何理解和存储输入的字符。

2. 校对规则(Collation)

  • 定义: 校对规则是在给定字符集的基础上,定义字符如何进行比较和排序。
  • 功能: 确定在查询和排序时字符如何进行比较。例如,是否区分大小写,如何处理特殊字符等。

总结来说,字符集定义了字符的存储方式,而校对规则定义了字符的比较和排序逻辑。

二、常用MySQL字符编码

1. Latin1

  • 编码类型: 单字节
  • 适用场景: 西欧语言
  • 特点: 速度快,节省空间

2. UTF8

  • 编码类型: 变长(最多3字节)
  • 适用场景: 支持多种语言,包括英文、欧洲语言和部分亚洲语言
  • 特点: 兼容性好,灵活

3. UTF8MB4

  • 编码类型: 变长(最多4字节)
  • 适用场景: 支持更广泛的字符集,包括Emoji表情符号
  • 特点: 完全支持Unicode

三、字符编码的对比与区别

  • Latin1 vs UTF8: Latin1是单字节编码,适用于西欧语言,而UTF8是变长编码,支持更广泛的语言,但可能占用更多的存储空间。
  • UTF8 vs UTF8MB4: UTF8MB4是UTF8的超集,可以存储更多的字符,包括Emoji。UTF8MB4在处理某些特殊字符时比UTF8更有效。

四、字符编码在表和字段中的应用

1. 表的编码

  • 表的字符集定义了该表中所有字段的默认字符集。
  • 当创建新表时,可以指定字符集;如果未指定,则使用数据库默认字符集。

2. 字段的编码

  • 字段的字符集可以独立于表的字符集设置。
  • 对于特定字段,可以指定不同的字符集来满足特定的需求。
  • 当字段中的字符集与表中的不一致时,字段的字符集优先生效。

五、UTF8MB4的校对规则:unicode_cibin

UTF8MB4是一种常用的字符集,提供对Unicode的完全支持。这个字符集有多种校对规则,其中unicode_cibin是常见的两种。

UTF8MB4_unicode_ci

  • 全称: UTF8 Multi-Byte 4-Character Set, Unicode Case-Insensitive Collation
  • 特点: 这是一种大小写不敏感的校对规则。它允许在比较时忽略大小写差异。例如,”ABC”和”abc”被认为是相等的。
  • 适用场景: 当你需要在比较时忽略大小写时,这种校对规则非常有用,如文本搜索。

UTF8MB4_bin

  • 全称: UTF8 Multi-Byte 4-Character Set, Binary Collation
  • 特点: 这是一种二进制校对规则。它基于字符的二进制值进行比较,这意味着它是大小写敏感的,并且对特殊字符的比较也非常严格。
  • 适用场景: 当你需要进行精确的、区分大小写的比较时,比如确保数据完全一致性的场景,这种校对规则很合适。

选择哪种校对规则取决于你的具体需求。unicode_ci在多数文本处理场景下较为常用,而bin则用于更精确的数据比较和排序场景。


在设计数据库和表时,选择合适的字符编码是非常重要的。不同的编码会影响数据的存储效率和兼容性。通常情况下,推荐使用UTF8MB4字符集,因为它提供了良好的兼容性和灵活性。