MySQL 8.0 リファレンスマニュアル


10.13.1 文字定義配列

それぞれの単純な文字セットには、sql/share/charsets ディレクトリに置かれた構成ファイルがあります。 MYSYS という名前の文字セットの場合、ファイルには MYSET.xml の名前が付けられます。 これは、<map> 配列要素を使用して、文字セットプロパティーを一覧表示します。<map> 要素は、これらの要素内に表示されます。

  • <ctype> は文字ごとに属性を定義します。

  • <lower><upper> は、小文字と大文字を一覧表示します。

  • <unicode> は、8 ビット文字値を Unicode 値にマップします。

  • <collation> 要素は、照合順序ごとに 1 つの要素を比較およびソートするための文字順序を示します。 文字コード自体が順序を提供するので、バイナリ照合順序には <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' は 16 進数 (_MY_X) と同様に大文字 (_MY_U) であるので、その ctype 値は次のように定義する必要があります。

ctype['A'+1] = _MY_U | _MY_X = 01 | 0200 = 0201

m_ctype.h のビットマスク値は 8 進数値ですが、MYSET.xml 内の <ctype> 配列の要素は 16 進値として書き込む必要があります。

<lower><upper> 配列は、文字セットの各メンバーに対応した小文字と大文字を保持します。 例:

lower['A'] should contain 'a'
upper['a'] should contain 'A'

<collation> 配列は、比較およびソートでどのように文字を順序付けする必要があるかを示します。 MySQL は、この情報の値に基づいて文字をソートします。 場合によっては、これは <upper> 配列と同じであり、ソートで大文字と小文字が区別されないことになります。 さらに複雑なソートルールについては (複雑な文字セットの場合)、セクション10.13.2「複雑な文字セットの文字列照合のサポート」での文字列照合の説明を参照してください。


関連キーワード:  文字, セット, 照合, 順序, 配列, 定義, ctype, 要素, define, リファレンス