Подтвердить что ты не робот

В чем разница между кавычкой и квадратными скобками в операторах SQL?

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

SELECT `username` FROM `users`
SELECT [username] FROM [users]
4b9b3361

Ответ 1

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

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

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

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

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

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

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)

Ответ 2

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

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

SELECT "username" FROM "users"

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

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

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