このセクションでは、MySQL に文字セットを追加する手順について説明します。 適切な手順は、文字セットが単純か複雑かによって異なります。
ソートに特別な文字列照合ルーチンを必要とせず、マルチバイト文字のサポートを必要としない文字セットが、単純な文字セットです。
これらのどちらかの機能が必要な文字セットが、複雑な文字セットです。
たとえば、greek
と swe7
は単純な文字セットですが、big5
と czech
は複雑な文字セットです。
次の手順を使用するには、MySQL ソース配布が必要です。 この手順では、MYSET
は追加する文字セットの名前を表します。
-
MYSET
の<charset>
要素をsql/share/charsets/Index.xml
ファイルに追加します。 ファイル内既存の内容を、新しい内容を追加するためのガイドとして使用します。latin1
<charset>
要素のリストの一部を以下に示します。<charset name="latin1"> <family>Western</family> <description>cp1252 West European</description> ... <collation name="latin1_swedish_ci" id="8" order="Finnish, Swedish"> <flag>primary</flag> <flag>compiled</flag> </collation> <collation name="latin1_danish_ci" id="15" order="Danish"/> ... <collation name="latin1_bin" id="47" order="Binary"> <flag>binary</flag> <flag>compiled</flag> </collation> ... </charset>
<charset>
要素は、文字セットのすべての照合順序を一覧表示します。 これらには少なくも、バイナリ照合順序とデフォルト (プライマリ) 照合順序が含まれます。 多くの場合、デフォルトの照合には接尾辞general_ci
を使用して名前が付けられます (一般に、大/小文字は区別されません)。 バイナリ照合順序をデフォルト照合順序にすることは可能ですが、通常、これらは異なります。 デフォルト照合順序にはprimary
フラグを付ける必要があります。 バイナリ照合順序にはbinary
フラグを付ける必要があります。それぞれの照合順序に一意の ID 番号を割り当てる必要があります。 1024 から 2047 の ID 範囲は、ユーザー定義の照合順序に予約されています。 現在使用されている照合順序 ID の最大値を検索するには、次のクエリーを使用します。
SELECT MAX(ID) FROM INFORMATION_SCHEMA.COLLATIONS;
-
このステップは、追加しているのが単純な文字セットか、複雑な文字セットかにより異なります。 単純な文字セットには、構成ファイルだけが必要ですが、複雑な文字セットには、照合順序関数またはマルチバイト関数あるいはその両方を定義する C ソースファイルが必要です。
単純な文字セットの場合、文字セットプロパティーについて記した構成ファイル (
) を作成します。MYSET
.xmlsql/share/charsets
ディレクトリにこのファイルを作成します。 このファイルの土台としてlatin1.xml
のコピーを使用できます。 ファイルの構文は非常に単純です。コメントは、通常の XML コメント (
<!--
) として記述されます。text
--><map>
配列要素内の単語は、任意の数の空白によって区切られます。<map>
配列要素内の各単語は、16 進形式の数値で表す必要があります。<ctype>
要素の<map>
配列要素には 257 語が含まれます。 そのあとのほかの<map>
配列要素には 256 語が含まれます。 セクション10.13.1「文字定義配列」を参照してください。Index.xml
内の文字セットに対して<charset>
要素に一覧表示された照合順序ごとに、文字の順序を定義する<collation>
要素を
に含める必要があります。MYSET
.xml
複雑な文字セットの場合、文字セットプロパティーについて記述し、文字セットに対する演算を適切に実行するために必要なサポートルーチンを定義した C ソースファイルを作成します。
strings
ディレクトリにctype-
ファイルを作成します。 既存のMYSET
.cctype-*.c
ファイルのいずれか (ctype-big5.c
など) を調べて、定義する必要のあるものを確認します。 ファイル内の配列には、ctype_
、MYSET
to_lower_
などの名前を付ける必要があります。 これらは、単純な文字セットの配列に対応します。 セクション10.13.1「文字定義配列」を参照してください。MYSET
Index.xml
内の文字セットに対して<charset>
要素に一覧表示された<collation>
要素ごとに、ctype-
ファイルが照合順序の実装を提供する必要があります。MYSET
.c文字セットで文字列照合関数が必要な場合は、セクション10.13.2「複雑な文字セットの文字列照合のサポート」を参照してください。
文字セットでマルチバイト文字のサポートが必要な場合は、セクション10.13.3「複雑な文字セットのマルチバイト文字のサポート」を参照してください。
-
構成情報を変更します。
MYSYS
の情報を追加するためのガイドとして、既存の構成情報を使用します。 ここでの例では、文字セットにデフォルト照合順序とバイナリ照合順序があることを想定していますが、MYSET
に追加の照合順序がある場合には、さらに多くの行が必要になります。-
mysys/charset-def.c
を編集し、新しい文字セットの照合順序を「登録」します。「宣言」セクションに次の行を追加します。
#ifdef HAVE_CHARSET_MYSET extern CHARSET_INFO my_charset_MYSET_general_ci; extern CHARSET_INFO my_charset_MYSET_bin; #endif
「登録」セクションに次の行を追加します。
#ifdef HAVE_CHARSET_MYSET add_compiled_collation(&my_charset_MYSET_general_ci); add_compiled_collation(&my_charset_MYSET_bin); #endif
文字セットが
ctype-
を使用する場合、MYSET
.cstrings/CMakeLists.txt
を編集して、ctype-
をMYSET
.cSTRINGS_SOURCES
変数の定義に追加します。-
cmake/character_sets.cmake
を編集します。アルファベット順で
CHARSETS_AVAILABLE
の値にMYSET
を追加します。アルファベット順で
CHARSETS_COMPLEX
の値にMYSET
を追加します。 これは、CMake が-DDEFAULT_CHARSET=
を認識できるように、単純な文字セットにも必要です。MYSET
-
再構成し、再コンパイルし、テストします。