限定标识符(Delimited identifiers)

在SQL中,用于命名数据库对象(如表、列等)的标识符有两种:普通标识符限定标识符
当你希望使用诸如 FROM 这样的SQL关键字作为标识符,或希望标识符名称中包含特殊字符时,就必须使用限定标识符
限定标识符的表示方式因SQL方言而异,以下是各种方言中的表示方式及其说明:


方言(Dialect) 示例(Sample) 说明(Comment)
标准 SQL "identifier" SQL标准将其称为“限定标识符”。标准要求限定标识符区分大小写,但并非所有数据库实现都严格执行这一点。
DB2 "identifier" 遵循标准,区分大小写,并允许使用特殊字符。
Firebird "identifier" 遵循标准,区分大小写
Ingres "identifier" 创建数据库时可设置是否区分大小写。为符合 ANSI/ISO Entry SQL-92,限定标识符必须区分大小写。
Linter "identifier" 遵循标准,区分大小写
MonetDB "identifier" 遵循标准,区分大小写
MSSQL [identifier]"identifier"¹ 是否区分大小写由数据库设置决定。
MySQL `identifier`"identifier"² 使用反引号是MySQL特有的语法。
Oracle "identifier" 遵循标准,区分大小写。如果不加双引号,则不区分大小写:所有标识符会在执行前被自动转换为大写,例如:CrEAtE table MyTable 实际被处理为 CREATE TABLE MYTABLE,符合SQL标准。
PostgreSQL "identifier" 遵循标准,区分大小写。若未加双引号,标识符将自动转换为小写(而标准规定应转换为大写)。
SQLite [identifier]"identifier"'identifier'identifier 永不区分大小写,即使使用引号也一样。方括号内的内容总被视为标识符;双引号中的内容若曾作为标识符出现,则被视为标识符,否则为字符串;单引号中内容在允许的上下文中作为字符串,否则也可能被解释为标识符。某些关键字即便未加引号也可直接作为标识符使用。
Virtuoso "identifier" 标准形式。

📌 注释

  1. 对于 MSSQL,若设置了 quoted_identifier 选项,"identifier" 才会作为标识符解析;否则,它会被当作单引号字符串解析。

  2. 对于 MySQL,仅在开启 ANSI 模式时,"identifier" 才被视为标识符,否则也可能被解释为字符串。

Last modified: Friday, 11 April 2025, 9:57 AM