SQL标准转义列名?

87 sql

是否有SQL标准来转义列名?如果不适用于mysql和sqlite?它也适用于sqlserver吗?

Dea*_*ing 84

引号 "

SQL:1999标准规定的是双引号(")(引号)来界定标识符.

<delimited identifier> ::= <double quote> <delimited identifier body> <double quote>
Run Code Online (Sandbox Code Playgroud)

Oracle,PostgreSQL,MySQL,MSSQL和SQlite都支持"作为标识符分隔符.

它们并非全部"用作"默认".例如,你必须要运行MySQL ANSI模式下,当SQL Server只支持它QUOTED_IDENTIFIERON.


tc.*_*tc. 70

根据SQLite,

  • 'foo' 是一个SQL字符串
  • "foo" 是一个SQL标识符(列/表/等)
  • [foo] 是MS SQL中的标识符
  • `foo` 是MySQL中的标识符

对于限定名称,语法为:"t"."foo"[t].[foo]等.

ANSI_QUOTES启用该选项后,MySQL支持标准"foo" .

  • 请注意,如果上下文不允许字符串,SQLite允许`'foo'`被解释为标识符,如果上下文不允许标识符,则``foo"`被解释为字符串,尽管有请注意,在将来的版本中可能会删除此行为. (3认同)
  • @thomasrutter是的我完全被这种行为所困扰...试图使用`WHERE"nonexistent_column"= 0`并且sqlite只是高兴地执行它假装我的``nonexistent_column"`是一个字符串.将名称完全限定为"my_table"."nonexistent_column"`强制sqlite更严格地表现. (2认同)

Ker*_*nes 17

对于MySQL,请使用back ticks`.

例如:

SELECT `column`, `column2` FROM `table`
Run Code Online (Sandbox Code Playgroud)


Bol*_*ait 16

对于MS SQL使用[和]

SELECT [COLUMN], [COLUMN 2] FROM [TABLE]
Run Code Online (Sandbox Code Playgroud)

  • 顺便说一句,如果您在MS SQL Server中使用[和]并且想要在名称中使用]字符(无论出于何种原因),那么您需要使用其他]字符(即使用]而不是]来转义它. ). (5认同)
  • 您可以!不过,我不会. (3认同)
  • 您可以在列名称中使用ms sql!?! (2认同)

ora*_*lar 6

将一些答案放在一起:

MS SQL(又名 T-SQL)、Microsoft Access SQL、DBASE/DBF:SELECT [COLUMN], [COLUMN2] FROM [TABLE]

MySQL: SELECT `COLUMN`, `COLUMN2` FROM `TABLE`

SQLite、Oracle、Postgresql:SELECT "COLUMN", "COLUMN2" FROM "TABLE"

请添加/编辑!