文档首页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手册页 (TGZ) - 258.5Kb
手册页 (Zip) - 365.5Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


12.13.1 字符定义数组

每个简单字符集都有一个配置文件,位于 sql/share/charsets 目录中。对于名为 MYSYS 的字符集,该文件名为 MYSET.xml。它使用 <map> 数组元素列出字符集属性。<map> 元素出现在以下元素中:

  • <ctype> 定义每个字符的属性。

  • <lower><upper> 列出小写和大写字符。

  • <unicode> 将 8 位字符值映射到 Unicode 值。

  • <collation> 元素指示用于比较和排序的字符排序,每个排序规则一个元素。二进制排序规则不需要 <map> 元素,因为字符代码本身就提供了排序。

对于在 strings 目录中的 ctype-MYSET.c 文件中实现的复杂字符集,存在对应的数组:ctype_MYSET[]to_lower_MYSET[],等等。并非每个复杂字符集都具有所有数组。另请参阅现有的 ctype-*.c 文件以获取示例。有关其他信息,请参阅 strings 目录中的 CHARSET_INFO.txt 文件。

大多数数组按字符值索引,并具有 256 个元素。<ctype> 数组按字符值 + 1 索引,并具有 257 个元素。这是处理 EOF 的传统约定。

<ctype> 数组元素是位值。每个元素描述字符集中单个字符的属性。每个属性都与一个位掩码相关联,如 include/m_ctype.h 中所定义

#define _MY_U   01      /* Upper case */
#define _MY_L   02      /* Lower case */
#define _MY_NMR 04      /* Numeral (digit) */
#define _MY_SPC 010     /* Spacing character */
#define _MY_PNT 020     /* Punctuation */
#define _MY_CTR 040     /* Control character */
#define _MY_B   0100    /* Blank */
#define _MY_X   0200    /* heXadecimal digit */

给定字符的 <ctype> 值应该是描述该字符的适用位掩码值的并集。例如,'A' 是一个大写字符 (_MY_U) 以及一个十六进制数字 (_MY_X),因此它的 ctype 值应定义如下:

ctype['A'+1] = _MY_U | _MY_X = 01 | 0200 = 0201

m_ctype.h 中的位掩码值是八进制值,但 MYSET.xml<ctype> 数组的元素应写为十六进制值。

<lower><upper> 数组保存与字符集的每个成员对应的小写和大写字符。例如:

lower['A'] should contain 'a'
upper['a'] should contain 'A'

每个 <collation> 数组指示应如何对字符进行排序以进行比较和排序。MySQL 根据此信息的值对字符进行排序。在某些情况下,这与 <upper> 数组相同,这意味着排序不区分大小写。有关更复杂的排序规则(对于复杂字符集),请参阅第 12.13.2 节 “复杂字符集的字符串排序规则支持”中对字符串排序规则的讨论。