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


MySQL 8.0 リファレンスマニュアル  /  ...  /  識別子とファイル名のマッピング

9.2.4 識別子とファイル名のマッピング

データベース識別子やテーブル識別子とファイルシステム内の名前との間には対応があります。 基本構造では、MySQL は各データベースをデータディレクトリ内のディレクトリとして表し、ストレージエンジンに応じて、各テーブルは適切なデータベースディレクトリ内の 1 つ以上のファイルによって表されます。

データファイルとインデックスファイルの場合、ディスク上の正確な表現はストレージエンジンによって異なります。 これらのファイルは、データベースディレクトリに格納することも、別のファイルに格納することもできます。 InnoDB データは InnoDB データファイルに格納されます。 InnoDB でテーブルスペースを使用する場合は、新たに作成した特定のテーブルスペースファイルが代わりに使用されます。

ASCII NUL (X'00') を除くすべての文字は、データベース識別子またはテーブル識別子で有効です。 MySQL では、データベースディレクトリやテーブルファイルを作成するとき、対応するファイルシステムオブジェクト内で問題のある文字をすべてエンコードします。

  • 基本的なラテン文字 (a..zA..Z)、数字 (0..9)、および下線 (_) はそのままエンコードされます。 このため、それらが大文字と小文字を区別するかどうかは、ファイルシステムの特性に直接依存します。

  • 大文字と小文字のマッピングを持つアルファベット起源のほかの国の文字はすべて、次の表に示すようにエンコードされます。 コード範囲カラムの値は UCS-2 値です。

    コード範囲 パターン 数値 使用 未使用 ブロック
    00C0..017F [@][0..4][g..z] 5*20= 100 97 3 補足ラテン語-1 + 拡張ラテン語-A
    0370..03FF [@][5..9][g..z] 5*20= 100 88 12 ギリシア語およびコプト語
    0400..052F [@][g..z][0..6] 20*7= 140 137 3 キリル文字 + 補足キリル文字
    0530..058F [@][g..z][7..8] 20*2= 40 38 2 米語
    2160..217F [@][g..z][9] 20*1= 20 16 4 数の形式
    0180..02AF [@][g..z][a..k] 20*11=220 203 17 拡張ラテン語-B + 拡張 IPA
    1E00..1EFF [@][g..z][l..r] 20*7= 140 136 4 拡張ラテン語追加
    1F00..1FFF [@][g..z][s..z] 20*8= 160 144 16 拡張ギリシャ語
    .... .... [@][a..f][g..z] 6*20= 120 0 120 RESERVED
    24B6..24E9 [@][@][a..z] 26 26 0 囲み文字
    FF21..FF5A [@][a..z][@] 26 26 0 全角と半角

    シーケンス内の 1 バイトが大文字と小文字の区別をエンコードします。 例: LATIN CAPITAL LETTER A WITH GRAVE@0G としてエンコードされ、LATIN SMALL LETTER A WITH GRAVE@0g としてエンコードされます。 ここでは、3 番目のバイト (G または g) が大文字と小文字の区別を示します。 (大/小文字を区別しないファイルシステムでは、両方の文字が同じとして扱われます。)

    言語ブロックの中にはキリル文字のように、2 番目のバイトが大文字と小文字の区別を決定することもあります。 補足ラテン語 1 などのほかの言語ブロックでは、3 番目のバイトが大文字と小文字の区別を決定します。 シーケンス内の 2 バイトが文字の場合は (拡張ギリシャ語など)、いちばん左の文字が大文字と小文字の区別を表します。 ほかの文字バイトはすべて、小文字である必要があります。

  • アンダースコア (_) 以外のすべての非文字および大文字/小文字のマッピングを持たないアルファベット (ヘブライ語など) の文字は、16 進数の a..f に小文字を使用して 16 進数表現を使用してエンコードされます:

    0x003F -> @003f
    0xFFFF -> @ffff

    16 進値は、ucs2 ダブルバイト文字セット内のキャラクタ値に対応します。

Windows では、nulprnaux などの一部の名前は、サーバーが対応するファイルまたはディレクトリを作成するときに、@@@ を名前に付加することによってエンコードされます。 これは、対応するデータベースオブジェクトのプラットフォーム間での移植性のためにすべてのプラットフォームで行われます。


関連キーワード:  小文字, 文字, 識別子, 大文字, リテラル, 区別, テーブル, データベース, バイト, InnoDB