每個簡單字元集在 sql/share/charsets
目錄中都有一個設定檔。對於名為 MYSYS
的字元集,該檔案名為
。它使用 MYSET
.xml<map>
陣列元素來列出字元集屬性。<map>
元素會出現在這些元素內
<ctype>
定義每個字元的屬性。<lower>
和<upper>
列出小寫和大寫字元。<unicode>
將 8 位元字元值對應至 Unicode 值。<collation>
元素表示用於比較和排序的字元順序,每個校對一個元素。二進位校對不需要<map>
元素,因為字元碼本身就提供順序。
對於在 strings
目錄中的 ctype-
檔案中實作的複雜字元集,有對應的陣列:MYSET
.cctype_
、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 節「複雜字元集的字串校對支援」中關於字串校對的討論。