Чи існує стандарт 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 просто із задоволенням виконав його, роблячи вигляд, що мій "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"
інтерпретувати як рядок, якщо контекст не дозволяє ідентифікатор, хоча є примітка, що ця поведінка може бути видалена в майбутньому версії.