更新时间:2025-09-12 GMT+08:00
分享

字符集与字符序

字符集(Character Set)是字符的编码规则,字符序(Collation)是字符的排序规则,本章主要对M-Compatibility下的字符集、字符序进行介绍,以下介绍的字符集、字符序规则和语法仅在M-Compatibility下支持。

  • M-Compatibility的字符集和字符序存在以下要求:
    • 每一个字符集都有一个或多个字符序,只有一个字符序为字符集的默认字符序。

    • 每一个字符序仅有一个相关联的字符集。

    • 相同数据使用不同的字符序排序结果可能会不同。

    • utf8mb4与utf8为同一字符集。

    • 建议表字段和server_encoding选择相同字符集,避免转码带来的性能损耗。

  • M-Compatibility的字符集和字符序支持以下功能:
    • 支持多种字符集存储字符串。

    • 支持使用字符序比较字符串。

    • 支持数据库级、模式级、表级、字段级字符集和字符序。

除SQL_ASCII库外,其他字符集的数据库支持多字符集混用。

支持的字符集

M-Compatibility下支持的字符集如下:

表1 M-Compatibility字符集列表

字符集

说明

默认字符序

utf8

针对Unicode的可变长度字符编码,字符编码长度1~4字节。

utf8mb4_general_ci

utf8mb4

与utf8为同一字符集。

utf8mb4_general_ci

gbk

国标汉字编码扩展字符集。

gbk_chinese_ci

gb18030

国标汉字编码字符集。

gb18030_chinese_ci

binary

二进制伪字符集。

binary

latin1

拉丁字符集。

latin1_swedish_ci

  • 当前数据库级、模式级、表级和字段级语法,仅支持指定为上述的字符集。
  • binary字符集实际通过已有字符集SQL_ASCII实现。
  • 当前GaussDB字符集之间的转换逻辑相比于mysql存在差异,因此可能存在一些特殊字符在M-Compatibility下可以转换,而mysql下转换失败;不建议使用这些生僻的特殊字符。
  • 目前GaussDB对不属于当前字符集的非法字符未执行严格的编码逻辑校验,可能导致此类非法字符成功输入。

支持的字符序

M-Compatibility下支持的字符序如下:

表2 M-Compatibility字符序列表

字符序

所属字符集

说明

空白填充

utf8_bin

utf8

使用二进制排序规则。

支持

utf8_general_ci

utf8

使用通用排序规则。

支持

utf8_unicode_ci

utf8

使用基于 Unicode Collation Algorithm (UCA) 的排序规则。

支持

utf8mb4_bin

utf8mb4

同utf8_bin。

支持

utf8mb4_general_ci

utf8mb4

同utf8_general_ci。

支持

utf8mb4_unicode_ci

utf8mb4

同utf8_unicode_ci。

支持

utf8mb4_0900_ai_ci

utf8mb4

使用基于 Unicode Collation Algorithm (UCA) 的排序规则。

支持

gbk_bin

gbk

使用二进制排序规则。

支持

gbk_chinese_ci

gbk

使用中文语言(拼音)排序规则。

支持

gb18030_bin

gb18030

使用二进制排序规则。

支持

gb18030_chinese_ci

gb18030

使用中文语言(拼音)排序规则。

支持

binary

binary

使用二进制排序规则。

不支持

latin1_swedish_ci

latin1

使用瑞典语排序规则。

支持

latin1_bin

latin1

使用二进制排序规则。

支持

  • 字符序名称是以和它们相关联的字符集的名称作为开头,通常后面加一个或多个表示其他字符序特征的后缀,例如: _bin表示二进制排序规则, _ci表示不区分大小写。
  • 当字符序支持空白填充属性时,字符串进行比较时忽略末尾空格,例如 : 'A ' = 'A'。

相关文档