Table of Contents
Database, table, index, column, and alias names are identifiers. This section describes the allowable syntax for identifiers in MySQL.
The following table describes the maximum length and allowable characters for each type of identifier.
Identifier | Maximum length (bytes) | Allowed characters |
Database | 64 | Any character that is allowed in a directory name except /, \, or . |
Table | 64 | Any character that is allowed in a filename, except /, \, or . |
Column | 64 | All characters |
Index | 64 | All characters |
Alias | 255 | All characters |
In addition to the restrictions noted in the table, no identifier can contain ASCII 0, ASCII 255, or the quoting character.
An identifier may be quoted or unquoted. If an identifier is a reserved word or contains special characters, you must quote it whenever you refer to it. For a list of reserved words, see Reserved words. Special characters are those outside the set of alphanumeric characters from the current character set, _, and $.
The quote character is the backtick (`):
mysql> SELECT * FROM `select` WHERE `select`.id > 100;
If the server SQL mode includes the ANSI_QUOTES mode option, it is also allowable to quote identifiers with double quotes:
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 SQL mode.
Identifier quoting was introduced in MySQL 3.23.6 to allow use of identifiers that are reserved words or that contain special characters. Before 3.23.6, cannot use identifiers that require quotes, so the rules for legal identifiers are more restrictive:
A name may consist of alphanumeric characters from the current character set, _, and $. The default character set is ISO-8859-1 (Latin1). This may be changed with the --default-character-set option to mysqld. See Character sets.
A name may start with any character that is legal in a name. In particular, a name may start with a digit; this differs from many other database systems! However, a name cannot consist only of digits.
You cannot use the . character in names because it is used to extend the format by which you can refer to columns (see immediately below).
It is recommended that you do not use names like 1e, because an expression like 1e+1 is ambiguous. It may be interpreted as the expression 1e + 1 or as the number 1e+1.
MySQL allows names that consist of a single identifier or multiple identifiers. The components of a multiple-part name should be separated by period (.) characters. The initial parts of a multiple-part name act as qualifiers that affect the context within which the final identifier is interpreted.
In MySQL you can refer to a column using any of the following forms:
Column reference | Meaning |
col_name | Column col_name from whichever table used in the query contains a column of that name. |
tbl_name.col_name | Column col_name from table tbl_name of the current database. |
db_name.tbl_name.col_name | Column col_name from table tbl_name of the database db_name. This syntax is unavailable before MySQL Version 3.22. |
If any components of a multiple-part name require quoting, quote them individually rather than quoting the name as a whole. For example, `my-table`.`my-column` is legal, but `my-table.my-column` is not.
You need not specify a tbl_name or db_name.tbl_name prefix for a column reference in a statement unless the reference would be ambiguous. Suppose tables t1 and t2 each contain a column c, and you retrieve c in a SELECT statement that uses both t1 and t2. In this case, c is ambiguous because it is not unique among the tables used in the statement. You must qualify it with a table name as t1.c or t2.c to indicate which table you mean. Similarly, to retrieve from a table t in database db1 and from a table t in database db2 in the same statement, you must refer to columns in those tables as db1.t.col_name and db2.t.col_name.
The syntax .tbl_name means the table tbl_name in the current database. This syntax is accepted for ODBC compatibility, because some ODBC programs prefix table names with a . character.