- 9.2.1. 識別符限制條件
- 9.2.2. 識別符大小寫敏感性
數據庫、表、索引、列和別名是識別符。該節描述了在MySQL中識別符的允許的語法。
下面的表描述了每類識別符的最大長度和允許的字符。
識別符 |
最大長度(字節) |
允許的字符 |
數據庫 |
64 |
目錄名允許的任何字符,不包括‘/’、‘’或者‘。’ |
表 |
64 |
文件名允許的任何字符,不包括‘/’、‘’或者‘。’ |
列 |
64 |
所有字符 |
索引 |
64 |
所有字符 |
別名 |
255 |
所有字符 |
除了表內注明的限制,識別符不可以包含ASCII 0或值為255的字節。數據庫、表和列名不應以空格結尾。在識別符中可以使用引號識別符,盡管應盡可能避免這樣使用。
識別符用Unicode(UTF8)保存。在.frm文件中保存的表定義的識別符和在mysql數據庫中的授權表保存的識別符也用Unicode(UTF8)保存。在MySQL 5.1中授權表(和其它表)的字符串列的大小等于字符個數;這說明(不象以前版本的MySQL)你可以在這些列保存的值中使用多字節字符而不需要降低字符個數。
識別符可以引起來也可以不引起來。如果識別符是一個保留字或包含特殊字符,無論何時使用,必須將它引起來。關于保留字的列表參見9.6節,“MySQL中保留字的處理”。特殊字符指那些當前字符集、‘_’和‘$’之外的文字數字字符集。
識別符的引用符是反勾號(‘`’):
mysql> SELECT * FROM `select` WHERE `select`.id > 100;
如果SQL服務器模式包括ANSI_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)
參見5.3.2節,“SQL服務器模式”。
如果你引用識別符,可以在識別符內包括識別符引用符。如果識別符內包括的字符與引用識別符的字符相同,則需要用雙字符。下面的語句創建一個名為a`b包含列c"d的表:
mysql> CREATE TABLE `a``b` (`c"d` INT);
建議不要使用XeX模式的名,例如1e或2e2,因為類似1e+1的表達式比較模糊。根據上下文,它可以解釋為表達式1e + 1或數字1e+1。
使用MD5產生表名時應仔細,因為它可能產生不合法的表名,如上所述。