### 10.13.1 字符定义数组

每个简单字符集都有一个配置文件，位于`sql/share/字符集`目录。对于一个名为*`MYSYS`*, 文件名为`*`MYSET`*.xml`.它用`<地图>`列出字符集属性的数组元素。`<地图>`元素出现在这些元素中：

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

-   `<下>`和`<上>`列出小写和大写字符。

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

-   `<整理>`元素表示用于比较和排序的字符顺序，每个排序规则一个元素。二进制排序规则不需要`<地图>`元素，因为字符代码本身提供了排序。

    对于在 a 中实现的复杂字符集`ctype-*`MYSET`*。C`文件中`字符串`目录下，有对应的数组：`ctype_*`MYSET`*[]`,`降低_*`MYSET`*[]`，等等。并非每个复杂字符集都包含所有数组。另见现有`ctype-*.c`文件作为示例。见`CHARSET_INFO.txt`文件中`字符串`目录以获取更多信息。

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

`<ctype>`数组元素是位值。每个元素描述字符集中单个字符的属性。每个属性都与一个位掩码相关联，如`包括/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>`给定字符的值应该是描述该字符的适用位掩码值的联合。例如，`'一种'`是一个大写字符 (`_MY_U`) 以及一个十六进制数字 (`_MY_X`）， 所以就是`类型`值应该这样定义：

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

位掩码值`m_ctype.h`是八进制值，但元素`<ctype>`数组在`*`MYSET`*.xml`应写为十六进制值。

这`<下>`和`<上>`数组保存与字符集的每个成员对应的小写和大写字符。例如：

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

每个`<整理>`数组指示字符应如何排序以进行比较和排序。MySQL 根据此信息的值对字符进行排序。在某些情况下，这与`<上>`数组，这意味着排序不区分大小写。对于更复杂的排序规则（对于复杂的字符集），请参阅字符串排序的讨论[第 10.13.2 节，“复杂字符集的字符串整理支持”](string-collating.html).
