Стандарт SQL для уникнення імен стовпців?


98

Чи існує стандарт SQL для уникнення імені стовпця? Якщо ні, що працює для MySQL та SQLite? це також працює для SQL Server?

Відповіді:


89

Лапка "

SQL: 1999 стандарт визначає , що подвійні лапки ( ") ( лапки ) використовуються для поділу ідентифікаторів.

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

Oracle, PostgreSQL, MySQL, MSSQL та SQlite підтримують "як роздільник ідентифікатора.

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


77

Відповідно до SQLite ,

  • 'foo' є рядком SQL
  • "foo" є ідентифікатором SQL (стовпець / таблиця / тощо)
  • [foo] є ідентифікатором у MS SQL
  • `foo` є ідентифікатором у MySQL

Для кваліфікованих імен синтаксисом є: "t"."foo"або [t].[foo]тощо.

MySQL підтримує стандартний "foo", коли ця ANSI_QUOTESопція ввімкнена.


3
Зверніть увагу, що SQLite дозволяє 'foo'інтерпретувати як ідентифікатор, якщо контекст не дозволяє рядок, і "foo"інтерпретувати як рядок, якщо контекст не дозволяє ідентифікатор, хоча є примітка, що ця поведінка може бути видалена в майбутньому версії.
thomasrutter 02

Отже, як ви робите "т". *?
Loenix

2
@thomasrutter Так, мене дуже покусила ця поведінка ... Спробував використати WHERE "nonexistent_column" = 0і sqlite просто із задоволенням виконав його, роблячи вигляд, що мій "nonexistent_column"рядок. Повна кваліфікація імені "my_table"."nonexistent_column"змушує sqlite поводитися більш суворо.
Rufflewind

foo, "foo"і 'foo'не працював у мене з MySQL. Це вимагало зворотних посилань. І що ще гірше, MySQL надавав марні повідомлення про помилки .
jww


20

Для використання MS SQL [та]

SELECT [COLUMN], [COLUMN 2] FROM [TABLE]

2
ви можете мати пробіли в іменах стовпців з ms sql!?!

3
ти можеш! Але я б не хотів.
JMP

1
Так, ви можете мати пробіли або зарезервовані слова як імена сутностей у MSSQL. Вам просто потрібно [] їх.
BoltBait

6
ДО ВСЬОГО, якщо ви використовуєте [та] у MS SQL Server і хочете використовувати символ] у самому назві (з якоїсь причини), то вам потрібно уникнути його за допомогою іншого] символу (тобто використовувати]] замість] ).
Даніель Джеймс Брайарс,


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"

Будь ласка, додайте / відредагуйте!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.