Стандарт SQL для экранирования имен столбцов?

100

Есть ли стандарт SQL для экранирования имени столбца? Если нет, что работает для MySQL и SQLite? он также работает для SQL Server?

Дейл К.
источник

Ответы:

90

Кавычка "

SQL: 1999 стандарт определяет , что двойные кавычки ( ") ( КАВЫЧКА ) используются для разделения идентификаторов.

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

Oracle, PostgreSQL, MySQL, MSSQL и SQlite все поддерживают "в качестве разделителя идентификаторов.

Не все они используются "по умолчанию. Например, MySQL должен работать в режиме ANSI, а SQL Server поддерживает его только тогда, когда он QUOTED_IDENTIFIERесть ON.

Дин Хардинг
источник
78

Согласно SQLite ,

  • 'foo' это строка SQL
  • "foo" это идентификатор SQL (столбец / таблица / и т. д.)
  • [foo] это идентификатор в MS SQL
  • `foo` это идентификатор в MySQL

Для полных имен используется синтаксис: "t"."foo"или [t].[foo]и т. Д.

MySQL поддерживает стандартный "foo", когда эта ANSI_QUOTESопция включена.

tc.
источник
3
Обратите внимание, что SQLite позволяет 'foo'интерпретировать как идентификатор, если контекст не позволяет строку, и "foo"интерпретировать как строку, если контекст не позволяет использовать идентификатор, хотя есть примечание, что это поведение может быть удалено в будущем. версии.
thomasrutter 02
Итак, как сделать "т". *?
Loenix 03
2
@thomasrutter Да, такое поведение меня полностью укусило ... Пытался использовать, WHERE "nonexistent_column" = 0и sqlite с радостью выполнил его, притворившись, что my "nonexistent_column"- это строка. Полная квалификация имени "my_table"."nonexistent_column"заставляет sqlite вести себя более строго.
Rufflewind
foo, "foo"и 'foo'у меня не работал с MySQL. Это требовало обратных кавычек. И что еще хуже, MySQL выдавал бесполезные сообщения об ошибках .
jww
22

Для MySQL используйте обратные галочки `.

Например:

SELECT `column`, `column2` FROM `table`
Керри Джонс
источник
20

Для MS SQL используйте [и]

SELECT [COLUMN], [COLUMN 2] FROM [TABLE]
BoltBait
источник
2
в именах столбцов могут быть пробелы с ms sql!?!
3
вы можете! Но я бы не стал.
JMP
1
Да, вы можете использовать пробелы или зарезервированные слова в качестве имен сущностей в MSSQL. Вам просто нужно [] их.
BoltBait
6
Кстати, если вы используете [и] в MS SQL Server и хотите использовать символ] в самом имени (по какой-либо причине), вам нужно экранировать его другим символом] (т.е. использовать]] вместо] ).
Дэниел Джеймс Брайарс,
2

Для использования DBASE / DBF [и]

SELECT [DATE], [TIME], [ANY_OTHER_TO_BE_ESCAPED_COLUMN] FROM [TABLE]
Сергей Матрунчик
источник
1

Собираем ответы вместе:

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"

Пожалуйста, добавьте / отредактируйте!

оранжевая гусеница
источник