文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美式 Letter) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  字元定義陣列

12.13.1 字元定義陣列

每個簡單的字元集都有一個組態檔,位於 sql/share/charsets 目錄中。對於名為 MYSYS 的字元集,檔案名為 MYSET.xml。它使用 <map> 陣列元素來列出字元集屬性。<map> 元素會出現在這些元素中

  • <ctype> 定義每個字元的屬性。

  • <lower><upper> 列出小寫和大寫字元。

  • <unicode> 將 8 位元字元值對應到萬國碼值。

  • <collation> 元素表示比較和排序的字元順序,每個校對一個元素。二進位校對不需要 <map> 元素,因為字元碼本身會提供順序。

對於在 strings 目錄的 ctype-MYSET.c 檔案中實作的複雜字元集,有對應的陣列:ctype_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 節「複雜字元集的字串校對支援」中關於字串校對的討論。