字符定义数组
每个简单字符集在sql/share/charsets
目录中都有一个配置文件。对于名为的字符集MYSYS
,文件名为MYSET.xml
。它使用<map>
数组元素列出字符集属性。<map>
元素出现在以下元素中:
<ctype>
定义每个字符的属性。<lower>
并<upper>
列出小写和大写字符。<unicode>
将8位字符值映射到Unicode值。<collation>
元素表示用于比较和校验的字符顺序,每个校验规则一个元素。二进制校验规则不需要任何<map>
元素,因为字符代码本身提供了校验。
对于在目录中的文件中实现的复杂字符集,有相应的数组:,等。并非每个复杂的字符集都具有所有数组。有关示例,另请参阅现有文件。有关其他信息,请参见目录中的文件。ctype-MYSET.c
strings
ctype_MYSET[]
to_lower_MYSET[]
ctype-*.c
CHARSET_INFO.txt
strings
大多数数组都由字符值索引,并具有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
是八进制值,但其中的<ctype>
数组元素MYSET.xml
应写为十六进制值。
<lower>
和<upper>
阵列保持小写和对应于所述字符集的每个成员大写字符。例如:
lower['A'] should contain 'a' upper['a'] should contain 'A'
每个<collation>
数组指示字符如何校验以进行比较和校验。MySQL根据此信息的值对字符进行校验。在某些情况下,它与<upper>
数组相同,这意味着校验不区分大小写。有关更复杂的校验规则(针对复杂字符集),请参见“对复杂字符集的字符串校验支持”中有关字符串校验的讨论。