• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 位置: MySQL 8 中文手册 -> MySQL 语言结构

    模式对象名称

    MySQL中的某些对象,包括数据库,表,索引,列,别名,视图,存储过程,分区,表空间,资源组和其他对象名,被称为标识符。本节介绍了MySQL中标识符的允许语法。“标识符长度限制”指出了每种标识符的最大长度。“标识符区分大小写”介绍了哪些类型的标识符区分大小写以及在什么条件下。

    标识符可以带引号或不带引号。如果标识符包含特殊字符或为保留字,则在引用标识符时必须将其引用。(例外:限定名称中句点后的保留字必须是标识符,因此无需引用。)在9.3节“关键字和保留字”中列出了保留字。

    在内部,标识符将转换为Unicode(UTF-8)并存储为Unicode(UTF-8)。标识符中允许的Unicode字符是基本多语言平面(BMP)中的字符。不允许使用补充字符。因此,标识符可能包含以下字符:

    • 未加引号的标识符中允许的字符:

      • ASCII:[0-9,az,AZ $ _](基本拉丁字母,数字0-9,美元,下划线)
      • 扩展:U + 0080 .. U + FFFF
    • 带引号的标识符中允许的字符包括完整的Unicode基本多语言平面(BMP),但U + 0000除外:

      • ASCII:U + 0001 .. U + 007F
      • 扩展:U + 0080 .. U + FFFF
    • 带引号或不带引号的标识符中不允许使用ASCII NUL(U + 0000)和补充字符(U + 10000及更高版本)。
    • 标识符可以以数字开头,但除非加引号,否则不能仅由数字组成。
    • 数据库,表和列名称不能以空格字符结尾。

    标识符引号是反引号(`):

    mysql> SELECT * FROM `select` WHERE `select`.id > 100;
    

    如果ANSI_QUOTES启用了SQL模式,则也可以在双引号中引起标识符的引用:

    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模式”中所述,控制服务器SQL模式。

    如果引用标识符,则标识符引用字符可以包含在标识符中。如果要包含在标识符中的字符与用于引用标识符本身的字符相同,则需要将该字符加倍。以下语句创建一个名为的表`b,其中包含名为的列c"d

    mysql> CREATE TABLE ` ``b` (`c"d` INT);
    

    在查询的选择列表中,可以使用标识符或字符串引号指定带引号的列别名:

    mysql> SELECT 1 AS `one`, 2 AS 'two';
    +-----+-----+
    | one 	| two 	|
    +-----+-----+
    |   1 	|   2 	|
    +-----+-----+
    

    在语句的其他地方,带引号的别名引用必须使用标识符引号,否则该引用将被视为字符串文字。

    建议您不要使用以Me或开头的名称,其中和是整数。例如,请避免将其用作标识符,因为这样的表达式是不明确的。根据上下文,它可能会解释为表达式或数字。MeNMN1e1e+31e + 31e+3

    MD5()用于产生表名时要小心,因为它会产生非法或歧义格式的名称,例如刚刚描述的格式。

    用户变量不能直接在SQL语句中用作标识符或标识符的一部分。有关更多信息和解决方法示例,请参见“用户定义的变量”。

    数据库和表名中的特殊字符编码在相应的文件系统名中,如“标识符与文件名的映射”所述。