MySQL では、データベース名、テーブル名、インデックス名、およびエイリアス名には、すべて同じ規則が適用されます。
注意: 識別子(データベース名、テーブル名、カラム名)を '`' で引用する事ができます。MySQL バージョン 3.23.6 以降では、ANSI モードで実行した時は、'"' も識別子の引用処理に使用することができます。 See 項1.8.2. 「ANSI モードでの MySQL の実行」。
| 識別子 | 最大長(バイト) | 使用可能な文字 |
| データベース | 64 | ディレクトリ名に使用可能なすべての文字(ただし、'/'、'\'、および '.' を除く)
|
| テーブル | 64 | ファイル名に使用可能なすべての文字(ただし、'/' と '.' を除く)
|
| カラム | 64 | すべての文字 |
| エイリアス | 255 | すべての文字 |
上記に補足して、ASCII(0)、ASCII(255)、および引用文字はいずれも識別子内では使用できないことに注意してください。
識別子が予約語である場合や、識別子に特殊文字が含まれている場合は、引用符として使用したバッククォート(「`」)文字でその識別子を必ず囲む必要があります。
mysql> SELECT * FROM `select` WHERE `select`.id > 100;
MAXDB または 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)
See 項4.1.1. 「mysqld コマンドラインオプション」。
バージョン 3.23.6 より前の MySQL バージョン では、名前に関して次の規則が適用されます。
個々の名前は、現在のキャラクタセットに従った英数字、および '_' と '$' で構成することができる。デフォルトのキャラクタセットは ISO-8859-1 Latin1。このキャラクタセットは、 mysqld に --default-character-set オプションを指定することにより変更可能。
See 項4.7.1. 「データおよびソート用キャラクタセット」。
個々の名前では、名前に使用可能な任意の文字を、先頭文字とすることができる。先頭を数字にすることも可能(この点は、他の多くのデータベースシステムと異なる)。ただし、数字だけで構成される名前は使用できない。
'.' 文字は名前には使用できない。この文字は、カラムを参照するための拡張形式で使用される(これについては後述する)。
1e のような名前は、使用しないでください。これは、1e+1 のような式があいまいになるためです。1e+1 は、式 1e + 1 として、または数値 1e+1 として解釈されます。
MySQL では、次の形式のいずれかを使用してカラムを参照することができます。
| カラム参照 | 意味 |
col_name | この名前のカラムが組み込まれたクエリで使用されているテーブル内のカラム col_name。
|
tbl_name.col_name | カレントデータベースのテーブル col_name 内のカラム tbl_name。
|
db_name.tbl_name.col_name | データベース db_name のテーブル tbl_name 内のカラム col_name。この形式は MySQL Version 3.22 以降で使用可能。
|
`column_name` | それ自体がキーワードであるか、その中に特殊文字を含んでいるカラム。 |
対象となる参照があいまいな場合、カラム参照の前に tbl_name や db_name.tbl_name を付ける必要があります。
たとえば、テーブル t1 と t2 のそれぞれに同名のカラム c があり、t1 と t2 の両方を使用する SELECT ステートメントで c を読み取るとします。この場合 c は、ステートメントで使用されている 2 つのテーブル中で一意なカラムを表すものではなく、あいまいであるため、t1.c または t2.c と記述することによって、どちらのテーブルが対象か指定する必要があります。同様に、データベース db1 のテーブル t とデータベース db2 のテーブル t に含まれているカラムを取り出す場合は、それぞれのテーブルのカラムを db1.t.col_name、db2.t.col_name として参照します。
構文 .tbl_name はカレントデータベースのテーブル tbl_name を意味します。この構文は ODBC との互換性を確保する目的で許容されています。これは、一部の ODBC プログラムでテーブル名の先頭に '.' 文字が付けられるためです。