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


10.13 文字セットの追加

このセクションでは、MySQL に文字セットを追加する手順について説明します。 適切な手順は、文字セットが単純か複雑かによって異なります。

  • ソートに特別な文字列照合ルーチンを必要とせず、マルチバイト文字のサポートを必要としない文字セットが、単純な文字セットです。

  • これらのどちらかの機能が必要な文字セットが、複雑な文字セットです。

たとえば、greekswe7 は単純な文字セットですが、big5czech は複雑な文字セットです。

次の手順を使用するには、MySQL ソース配布が必要です。 この手順では、MYSET は追加する文字セットの名前を表します。

  1. 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;
  2. このステップは、追加しているのが単純な文字セットか、複雑な文字セットかにより異なります。 単純な文字セットには、構成ファイルだけが必要ですが、複雑な文字セットには、照合順序関数またはマルチバイト関数あるいはその両方を定義する C ソースファイルが必要です。

    単純な文字セットの場合、文字セットプロパティーについて記した構成ファイル (MYSET.xml) を作成します。 sql/share/charsets ディレクトリにこのファイルを作成します。 このファイルの土台として latin1.xml のコピーを使用できます。 ファイルの構文は非常に単純です。

    • コメントは、通常の XML コメント (<!-- text -->) として記述されます。

    • <map> 配列要素内の単語は、任意の数の空白によって区切られます。

    • <map> 配列要素内の各単語は、16 進形式の数値で表す必要があります。

    • <ctype> 要素の <map> 配列要素には 257 語が含まれます。 そのあとのほかの <map> 配列要素には 256 語が含まれます。 セクション10.13.1「文字定義配列」を参照してください。

    • Index.xml 内の文字セットに対して <charset> 要素に一覧表示された照合順序ごとに、文字の順序を定義する <collation> 要素を MYSET.xml に含める必要があります。

    複雑な文字セットの場合、文字セットプロパティーについて記述し、文字セットに対する演算を適切に実行するために必要なサポートルーチンを定義した C ソースファイルを作成します。

  3. 構成情報を変更します。 MYSYS の情報を追加するためのガイドとして、既存の構成情報を使用します。 ここでの例では、文字セットにデフォルト照合順序とバイナリ照合順序があることを想定していますが、MYSET に追加の照合順序がある場合には、さらに多くの行が必要になります。

    1. 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
    2. 文字セットが ctype-MYSET.c を使用する場合、strings/CMakeLists.txt を編集して、ctype-MYSET.cSTRINGS_SOURCES 変数の定義に追加します。

    3. cmake/character_sets.cmake を編集します。

      1. アルファベット順で CHARSETS_AVAILABLE の値に MYSET を追加します。

      2. アルファベット順で CHARSETS_COMPLEX の値に MYSET を追加します。 これは、CMake-DDEFAULT_CHARSET=MYSET を認識できるように、単純な文字セットにも必要です。

  4. 再構成し、再コンパイルし、テストします。


関連キーワード:  文字, セット, 照合, 順序, 追加, MYSET, サポート, charset, 要素, 定義