Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
EPUB - 7.5Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


MySQL 5.6 リファレンスマニュアル  /  言語構造  /  スキーマオブジェクト名

9.2 スキーマオブジェクト名

データベース、テーブル、インデックス、カラム、エイリアス、ビュー、ストアドプロシージャー、パーティション、テーブルスペース、その他のオブジェクト名など、MySQL 内のある種のオブジェクトは、識別子として知られています。このセクションでは、MySQL で識別子について許可されている構文について説明します。セクション9.2.2「識別子の大文字と小文字の区別」では、どのタイプの識別子がどの条件下で大文字と小文字を区別するかについて説明します。

識別子は引用符で囲むことも囲まないこともあります。識別子に特殊文字が含まれている場合、または識別子が予約語である場合、その識別子を参照するときは必ず引用符で囲む必要があります。(例外: 修飾名内でピリオドのあとに続く予約語は識別子である必要があるため、引用符で囲む必要はありません。)予約語はセクション9.3「予約語」に記載されています。

識別子は内部で Unicode に変換されます。以下の文字を含めることができます。

  • 引用符で囲まれていない識別子で許可される文字。

    • ASCII: [0-9,a-z,A-Z$_] (基本的なラテン文字、0-9 の数字、ドル、下線)

    • 拡張: U+0080 ..U+FFFF

  • 引用符で囲まれている識別子で許可される文字には、U+0000 を除き、完全な Unicode Basic Multilingual Plane (BMP) が含まれます。

    • ASCII: U+0001 ..U+007F

    • 拡張: U+0080 ..U+FFFF

  • ASCII NUL (U+0000) と補助文字 (U+10000 以上) は、引用符で囲まれた識別子または引用符で囲まれていない識別子では許可されません。

  • 識別子は数字で始めることができますが、引用符で囲まれていないかぎり、数字のみで構成することはできません。

  • データベース名、テーブル名、およびカラム名は、空白文字で終えることはできません。

識別子引用符文字は逆引用符 (`) です。

mysql> SELECT * FROM `select` WHERE `select`.id > 100;

ANSI_QUOTES SQL モードが有効になっている場合、二重引用符内で識別子を引用符で囲むことも許可されています。

mysql> CREATE TABLE "test" (col INT);
ERROR 1064: You have an error in your SQL syntax...
mysql> SET sql_mode='ANSI_QUOTES';
mysql> CREATE TABLE "test" (col INT);
Query OK, 0 rows affected (0.00 sec)

ANSI_QUOTES モードでは、サーバーは二重引用符で囲まれた文字列を識別子として解釈します。この結果、このモードが有効になっているときには、文字列リテラルは単一引用符で囲む必要があります。二重引用符で囲むことはできません。サーバー SQL モードは、セクション5.1.7「サーバー SQL モード」で説明しているように制御されます。

識別子が引用符で囲まれていれば、識別子引用符文字を識別子内に含めることができます。識別子内に含める文字が識別子自体を囲むのに使用している引用符と同じ場合、文字を二重にする必要があります。次のステートメントは、c"d という名前のカラムを含んだ a`b という名前のテーブルを作成します。

mysql> CREATE TABLE `a``b` (`c"d` INT);

クエリーの選択リストで、引用したカラムエイリアスを指定するには、識別子または文字列引用文字を使用します。

mysql> SELECT 1 AS `one`, 2 AS 'two';
+-----+-----+
| one | two |
+-----+-----+
|   1 |   2 |
+-----+-----+

ステートメント内のどこに指定する場合でも、エイリアスへの引用した参照には、識別子引用符を使用する必要があります。そうしないと、参照は文字列リテラルとして扱われます。

MeMeN (この場合の MN は整数) で始まる名前を使用しないことが推奨されています。たとえば、1e を識別子として使用しないでください。これは、1e+3 などの式があいまいになるためです。コンテキストに応じて、式 1e + 3 として、または数値 1e+3 として解釈される場合があります。

テーブルネーム名を作成するのに MD5() を使用する場合は注意が必要です。なぜなら、これは、前述のような不正な形式やあいまいな形式で名前を生成する可能性があるからです。

ユーザー変数は、識別子または識別子の一部として SQL ステートメントの中で直接使用することはできません。回避策の詳細と例については、セクション9.4「ユーザー定義変数」を参照してください。

セクション9.2.3「識別子とファイル名のマッピング」で説明しているように、データベース名とテーブル名内の特殊文字は、対応するファイルシステム名でエンコードされます。特殊文字を含む古いバージョンの MySQL のデータベースまたはテーブルがあり、それの基になるディレクトリ名またはファイル名が新しいエンコーディングを使用するように更新されていない場合、サーバーはそれらの名前に #mysql50# というプリフィクスを付けて表示します。このような名前の参照、または新しいエンコーディングへの変換の詳細は、そのセクションを参照してください。

次の表には、識別子のタイプごとの最大の長さが示されています。

識別子 最大の長さ (文字)
Database 64 (NDB ストレージエンジン: 63)
テーブル 64 (NDB ストレージエンジン: 63)
カラム 64
インデックス 64
制約 64
ストアドプログラム 64
ビュー 64
テーブルスペース 64
サーバー 64
ログファイルグループ 64
エイリアス 256 (表のあとの例外を参照してください)
複合ステートメントラベル 16

CREATE VIEW ステートメント内のカラム名に対するエイリアスは、(256 文字の最大のエイリアス長ではなく) 64 文字の最大のカラム長に対してチェックされます。

識別子は Unicode (UTF-8) を使用して格納されます。これは、.frm ファイル内に格納されたテーブル定義の識別子と、mysql データベース内の付与テーブルに格納された識別子に適用されます。付与テーブル内の識別子文字列カラムのサイズは文字数で測定されます。これらのカラムに格納されている値に許可されている文字数を減らすことなく、マルチバイト文字を使用できます。これは MySQL 4.1 より前には当てはまりません。前述のように、許容されている Unicode 文字は、Basic Multilingual Plane (BMP) の文字です。補助文字は許可されません。

MySQL Cluster では、データベースおよびテーブルの名前に 63 文字の最大長を課します。セクション18.1.6.5「MySQL Cluster 内のデータベースオブジェクトに関する制限」を参照してください。


User Comments
Sign Up Login You must be logged in to post a comment.