SQL标准转义列名?


96

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

sql 

Answers:


88

引号 "

SQL:1999标准指定的是双引号(“)(引号)来界定标识符。

<delimited identifier> ::= <double quote> <delimited identifier body> <double quote>

Oracle,PostgreSQL,MySQL,MSSQL和SQlite都支持"作为标识符定界符。

它们并不全部"用作“默认值”。例如,您必须在ANSI模式下运行MySQL,而SQL Server仅在QUOTED_IDENTIFIERis 时支持它ON


76

根据SQLite

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

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

ANSI_QUOTES启用该选项时,MySQL支持标准的“ foo” 。


3
请注意,'foo'如果上下文不允许使用字符串,则将SQLite 解释为标识符;如果上下文不允许使用标识符,则可以将SQLite "foo"解释为字符串,但请注意,将来可能会删除此行为版本。
thomasrutter

所以,你怎么做“ t”。*?
Loenix

2
@thomasrutter是的,我完全得到了由这种行为咬伤......试图使用WHERE "nonexistent_column" = 0和SQLite只是快乐地执行它假装我"nonexistent_column"是一个字符串。完全限定该名称,因为它"my_table"."nonexistent_column"迫使sqlite严格遵守行为。
Rufflewind

foo"foo"并且'foo'不适用于MySQL。它需要反引号。更糟糕的是,MySQL提供了无用的错误消息
jww

22

对于MySQL,请使用反斜线`。

例如:

SELECT `column`, `column2` FROM `table`

19

对于MS SQL,请使用[和]

SELECT [COLUMN], [COLUMN 2] FROM [TABLE]

2
您可以使用ms sql在列名中留空格!!!

3
您可以!我不会,但是。
JMP 2010年

1
是的,您可以在MSSQL中使用空格或保留字作为实体名称。您只需要[]。
BoltBait 2010年

6
顺便说一句,如果您在MS SQL Server中使用[和],并且想要在名称本身中使用[]字符(无论出于何种原因),则需要使用其他]字符(即,使用]]而不是]对其进行转义。 )。
Daniel James Bryars


1

将一些答案放在一起:

MS SQL(aka 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"

请添加/编辑!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.