Есть ли стандарт SQL для экранирования имени столбца? Если нет, что работает для MySQL и SQLite? он также работает для SQL Server?
Ответы:
"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опция включена.
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"
Пожалуйста, добавьте / отредактируйте!
'foo'интерпретировать как идентификатор, если контекст не позволяет строку, и"foo"интерпретировать как строку, если контекст не позволяет использовать идентификатор, хотя есть примечание, что это поведение может быть удалено в будущем. версии.