В чем разница между обратным трюком и квадратной скобкой в ​​операторах SQL? - PullRequest
13 голосов
/ 15 марта 2012

Я думал, что будет другой вопрос по этому поводу, но я не смог его найти.В MySQL с PHP я обычно инкапсулирую имена полей с помощью обратных кавычек, чтобы маскировать любые зарезервированные имена или символы.Однако один из моих коллег отметил, что этого также можно достичь, используя квадратные скобки.Если не считать тот факт, что обратные пометки не совместимы с сервером SQL (по-видимому), в чем разница?Что я должен использовать?

SELECT `username` FROM `users`
SELECT [username] FROM [users]

Ответы [ 2 ]

23 голосов
/ 15 марта 2012

SQL Server / T-SQL использует квадратные скобки (а также MS Access), в то время как MySQL использует обратные галочки.

Насколько я знаю, может появиться в документации или использовать при тестировании, квадратные скобки не действительны для MySQL.Поэтому, если вам нужно заключить ключевое слово в качестве имени таблицы в SQL Server, используйте [], а в MySQL используйте обратные кавычки или двойные кавычки, когда ANSI_QUOTES включен.

Из документации:

Символом кавычки идентификатора является обратная черта («` »):

mysql> SELECT * FROM `select` WHERE `select`.id > 100;

Если включен режим SQL ANSI_QUOTES, онтакже допустимо заключать в кавычки идентификаторы:

mysql> CREATE TABLE "test" (col INT);
ERROR 1064: You have an error in your SQL syntax...
mysql> SET sql_mode='ANSI_QUOTES';
mysql> CREATE TABLE "test" (col INT);
Query OK, 0 rows affected (0.00 sec)
5 голосов
/ 15 марта 2012

Оба являются нестандартными способами заключать в кавычки имена объектов, которые должны быть либо чувствительны к регистру, либо являются зарезервированным словом, либо содержать специальные символы, которые не допускаются иначе.

Стандартный символ кавычки для такого идентификатора - двойная кавычка. Чтобы быть совместимым с ANSI SQL, вы должны использовать их:

SELECT "username" FROM "users"

Но обратите внимание, что идентификаторы в кавычках чувствительны к регистру в соответствии с ANSI SQL. Однако оба упомянутых продукта не соответствуют этому требованию. То, будет ли такой идентификатор чувствительным к регистру или нет, зависит от нескольких (разных) параметров конфигурации в MySQL и параметров сортировки базы данных в MS SQL Server.

Обе СУБД могут (и, на мой взгляд, должны) быть настроены на прием символов стандартной кавычки ANSI.

Я бы настоятельно рекомендовал избегать любого имени объекта, которое требует цитирования. Использование идентификаторов, которые не требуют цитирования, в конечном итоге избавит вас от многих проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...