# 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 节,“复杂字符集的字符串整理支持”.