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