データベース、テーブル、インデックス、カラム、そしてエイリアスは識別子です。このセクションではMySQLの識別子で使用できる構文を記述します。
下記テーブルは各識別子の長さ(最長時)記しています。
識別子 | 最長(バイト) |
データベース | 64 |
テーブル | 64 |
カラム | 64 |
インデックス | 64 |
エイリアス | 255 |
識別子に現れる文字には制限があります。
識別子内でASCII 0 (0x00
)
および255のビット値は使用できません。
識別子内での識別引用符使用は許可されていますが、必要でなければ使用は避けてください。
データベース名、テーブル名、そしてカラム名はスペース文字で終われません。
MySQL
5.1.6前では、データベース名には‘/
’、‘\
’、
‘.
’やディレクトリー名で許可されていない文字を使用することはできませんでした。
MySQL
5.1.6前では、テーブル名には‘/
’、‘\
’、
‘.
’やファイル名で許可されていない文字を使用することはできませんでした。
識別子の長さは文字数ではなく、バイト数で表現されます。識別子名にマルチバイト文字を使用している場合、長さは使用した文字の合計バイト数で表現されます。
MySQL
5.1.6より、データベース名とテーブル名内の特殊文字は項8.2.3. 「ファイル名への識別子のマッピング」で記述されているとおり、対応するファイルシステム名にコード化されています。旧バージョンのMySQLを使用していて、で特殊文字を含むデータベース名やテーブル名が新しいエンコーディングに対応するようアップデートされていない場合、#mysql50#
が接頭に表示されます。そういった名称を検索、もしくはそれらを新しいエンコーディングに変換するには、そのセクションを参照してください。
識別子は(UTF-8)を使って保存されます。これは.frm
ファイル内に保存されたテーブル定義の識別子とmysql
データベース内の許可テーブルに保存された識別子に対応しています。MySQL5.1の許可テーブル内(そして他のテーブル)の文字列カラムの大きさは文字数でカウントされます。これは前バージョンのMySQLと違って、カラム内の値に充てる文字数を減らさずにマルチバイト文字を使用することができることを意味しています。
識別子を引用符で囲んだり、引用符を取り除くことができます。識別子が予約語、もしくは特殊文字を含む場合、
参照する時必ず引用符で囲まなければいけません。.(例外:修飾名内で点の後に続く語は識別子であるため、予約語であっても引用符で囲む必要はありません。)予約語のリストはこちらを参照してください。項8.3. 「MySQLでの予約語の扱い」.特殊文字とは、英数字の組み合わせであるキャラクタセット外の‘_
’と‘$
’になります。
識別子引用符文字は(‘`
’)バッククォートです。
mysql> SELECT * FROM `select` WHERE `select`.id > 100;
ANSI_QUOTES
モードでMySQLを実行する場合は、識別子を囲む引用符として二重引用符も使用できます。
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モードは項4.2.6. 「SQL モード」で表現されるように制御されています。
識別子が引用符で囲まれていれば識別子の引用符文字を識別子内に含むことができます。識別子内に含まれる文字が識別子を囲むのに使用している引用符と同じ場合、文字を二重にする必要があります。下記のステートメントはa`b
というc"d
カラムを含んだテーブルを作成します。
mysql> CREATE TABLE `a``b` (`c"d` INT);
識別子は1つのディジットで始まることもありますが、引用されない限りはディジットのみで構成されることはありません。
M
およびN
は整数ですので、
やM
e
といった形式名を使用することはお勧めできません。例:M
eN
1e
や2e2
を識別子として使用しないでください。これは、1e+3
といった式があいまいになるためです。コンテキスト応じて、式1e
+
3
として、または数値1e+3
として解釈される場合があります。
Bテーブルネーム名を作成するのにMD5()
を使用する場合は注意が必要です。というのも、記述されたものがそのまま表現されてしまうといった、無効なフォーマットやあいまいなフォーマット名を作成する可能性があるからです。