每个简单字符集在sql/share/charsets
目录中都有一个配置文件。对于名为 的字符集MYSYS
,文件名为
. 它使用MYSET
.xml<map>
数组元素列出字符集属性。<map>
元素出现在这些元素中:
<ctype>
定义每个字符的属性。<lower>
并<upper>
列出小写和大写字符。<unicode>
将 8 位字符值映射到 Unicode 值。<collation>
元素指示用于比较和排序的字符顺序,每个排序规则一个元素。二进制归类不需要<map>
元素,因为字符代码本身提供了排序。
对于在目录下的文件中
实现的复杂字符集
,有对应的数组:
,
, 等等。并非每个复杂字符集都具有所有数组。另请参阅现有
文件以获取示例。有关其他信息,
请参阅
目录中的文件
。ctype-
MYSET
.cstrings
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>
数组相同,这意味着排序不区分大小写。对于更复杂的排序规则(对于复杂字符集),请参阅第 10.13.2 节“复杂字符集的字符串整理支持”中关于字符串整理的讨论。