Есть ли стандарт SQL для экранирования имени столбца? Если нет, что работает для MySQL и SQLite? он также работает для SQL Server?
100
"
SQL: 1999 стандарт определяет , что двойные кавычки ( ") ( КАВЫЧКА ) используются для разделения идентификаторов.
<delimited identifier> ::= <double quote> <delimited identifier body> <double quote>
Oracle, PostgreSQL, MySQL, MSSQL и SQlite все поддерживают "
в качестве разделителя идентификаторов.
Не все они используются "
по умолчанию. Например, MySQL должен работать в режиме ANSI, а SQL Server поддерживает его только тогда, когда он QUOTED_IDENTIFIER
есть ON
.
Согласно SQLite ,
'foo'
это строка SQL"foo"
это идентификатор SQL (столбец / таблица / и т. д.)[foo]
это идентификатор в MS SQL`foo`
это идентификатор в MySQLДля полных имен используется синтаксис: "t"."foo"
или [t].[foo]
и т. Д.
MySQL поддерживает стандартный "foo", когда эта ANSI_QUOTES
опция включена.
'foo'
интерпретировать как идентификатор, если контекст не позволяет строку, и"foo"
интерпретировать как строку, если контекст не позволяет использовать идентификатор, хотя есть примечание, что это поведение может быть удалено в будущем. версии.WHERE "nonexistent_column" = 0
и sqlite с радостью выполнил его, притворившись, что my"nonexistent_column"
- это строка. Полная квалификация имени"my_table"."nonexistent_column"
заставляет sqlite вести себя более строго.foo
,"foo"
и'foo'
у меня не работал с MySQL. Это требовало обратных кавычек. И что еще хуже, MySQL выдавал бесполезные сообщения об ошибках .Для MySQL используйте обратные галочки `.
Например:
SELECT `column`, `column2` FROM `table`
источник
Для MS SQL используйте [и]
SELECT [COLUMN], [COLUMN 2] FROM [TABLE]
источник
Для использования DBASE / DBF
[
и]
SELECT [DATE], [TIME], [ANY_OTHER_TO_BE_ESCAPED_COLUMN] FROM [TABLE]
источник
Собираем ответы вместе:
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"
Пожалуйста, добавьте / отредактируйте!
источник