9.2 模式对象名称

官方文档地址:9.2 Schema Object Names


9.2.1 Identifier Length Limits
9.2.2 Identifier Qualifiers
9.2.3 Identifier Case Sensitivity
9.2.4 Mapping of Identifiers to File Names
9.2.5 函数名称解析和分辨

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

标识符可以带引号,也可以不带引号。如果标识符包含特殊字符或是保留字,当您引用它时必须带引号。(例外:限定名中跟在句点后面的保留字必须是标识符,所以不需要带引号。)保留字在 9.3 关键字和保留字 中列出。

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

  • 不带引号的标识符中允许的字符:
    ASCII:a-zA-Z0-9$_(基本拉丁字母,数字0-9,美元符号,下划线)。
    扩展的:U+0080U+FFFF
  • 引号中允许的字符包括完整的Unicode基本多语言平面(BMP), U+0000除外:
    ASCII:U+0001U+007F
    扩展的:U+0080U+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 模式的控制如 5.1.11 服务器 SQL 模式 所述。

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

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

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

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

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

建议不要使用以MeMeN开头的名称,其中MN都是整数。例如,避免使用1e作为标识符,因为像1e+3这样的表达式是有二义性的。根据上下文,它可能被解释为表达式1e+3或数字1e+3

在使用MD5()生成表名时要小心,因为它可能会生成非法的或不明确的格式,比如刚才描述的那些格式。

用户变量不能在 SQL 语句中直接作为标识符或标识符的一部分使用。了解更多信息和解决方法的例子,请参见 9.4 用户定义变量

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值