9.2. Database, Table, Index, Column, and Alias Names
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.
In addition to the restrictions noted in the table, no identifier
can contain ASCII 0 or a byte with a value of 255. Database,
table, and column names should not end with space characters. The
use of identifier quote characters in identifiers is permitted,
although it is best to avoid doing so if possible.
Identifiers are stored using Unicode (UTF-8). This applies to
identifiers in table definitions that stored in
.frm
files and to identifiers stored in the
grant tables in the mysql
database. The sizes
of the string columns in the grant tables (and in any other
tables) in MySQL 5.1 are given as number of
characters. This means that (unlike some earlier versions of
MySQL) you can use multi-byte characters without reducing the
number of characters allowed for values stored in these columns.
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.
(Exception: A word that follows a period in a qualified name must
be an identifier, so it is not necessary to quote it, even if it
is a reserved word.) For a list of reserved words, see
Section 9.5, “Treatment of Reserved Words in MySQL”. Special characters are those
outside the set of alphanumeric characters from the current
character set, ‘_
’, and
‘$
’.
The identifier quote character is the backtick
(‘`
’):
mysql> SELECT * FROM `select` WHERE `select`.id > 100;
If the ANSI_QUOTES
SQL mode is enabled, it is
also allowable to quote identifiers within 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)
Note: Because ANSI_QUOTES
causes the server to
interpret double-quoted strings as identifiers, string literals
must be enclosed within single quotes. They cannot be enclosed
within double quotes when ANSI_QUOTES
is
enabled.
The server SQL mode is controlled as described in
Section 5.2.5, “The Server SQL Mode”.
Identifier quote characters can be included within an identifier
if you quote the identifier. If the character
to be included within the identifier is the same as that used to
quote the identifier itself, then you need to double the
character. The following statement creates a table named
a`b
that contains a column named
c"d
:
mysql> CREATE TABLE `a``b` (`c"d` INT);
It is recommended that you do not use names of the form
M
e
or
M
eN
,
such as 1e
or 2e2
, because
an expression such as 1e+3
is ambiguous.
Depending on context, it might be interpreted as the expression
1e + 3
or as the number
1e+3
.
Be careful when using MD5()
to produce table
names because it can produce names in illegal or ambiguous formats
such as those just described.