Стандарт эскейпинга имен колонок SQL: MySQL, SQLite, MS SQL
Быстрый ответ
В стандартах SQL имена столбцов обычно окружаются двойными кавычками ("
). Их использование необходимо, когда речь идет о зарезервированных словах или именах столбцов, содержащих специальные символы.
SELECT "order", "user"
FROM "data";
Отметим, что различные системы управления базами данных предпочитают использовать свои знаки. Например, в MySQL используются обратные кавычки (`), а SQL Server предпочитает квадратные скобки (
`). Прежде чем приступить к использованию, стоит ознакомиться с документацией выбранной СУБД.
Рассмотрим более подробно разграничители идентификаторов SQL
Когда вы работаете с несколькими СУБД, вам следует учитывать их особенности. Согласно стандарту SQL:1999, имена столбцов должны обозначаться двойными кавычками ("
), однако в реальности каждая система управления базами имеет свои особенности.
Разграничители идентификаторов, специфичные для разных СУБД
- MySQL: по умолчанию привычнее использовать обратные кавычки (
- SQL Server: предпочитает использование квадратных скобок (
[ ]
), но при включении параметра QUOTED_IDENTIFIER поддерживает и двойные кавычки. - SQLite: полностью соответствует стандарту, признавая двойные кавычки.
- Oracle и PostgreSQL: также, как и SQLite, они следуют стандарту и используют двойные кавычки без необходимости в дополнительной настройке.
Написание универсальных запросов
Когда вы работаете с множеством СУБД, необходимо узнавать и применять специфические для каждой системы разграничители идентификаторов, чтобы запросы работали корректно.
Визуализация
Базу данных SQL можно сравнить с музеем искусства: таблицы – это произведения искусства, а столбцы – объекты, которые они содержат:
Художественная галерея 🖼️: | Произведение искусства (Таблица) |
|----------------------------------|
| Объект_А (Столбец) |
| Объект_2_с_рамкой (Столбец) | <<< именно эта "рамка" символизирует экранирование
| Объект#3 (Столбец) |
Экранирование обозначает для SQL-движка, что имя столбца должно быть интерпретировано буквально, как отдельный элемент, а не как часть SQL-команды.
SELECT "Объект_2_с_рамкой" FROM "Произведение искусства";
Подробная информация о разграничителях идентификаторов в SQL
Правила использования разграничителей
Соблюдение правил экранирования значительно снижает вероятность возникновения SQL-ошибок и облегчает совместимость между различными СУБД.
В каких случаях следует экранировать имена?
- Зарезервированные слова: Если идентификатор совпадает с ключевым словом SQL, необходимо использовать экранирование, чтобы избежать путаницы.
- Специальные символы: При использовании в идентификаторах пробелов, знаков пунктуации и других символов требуется экранирование.
- Смешение регистров: В некоторых СУБД, включая PostgreSQL, регистр неквотированных имен влияет на то, как они интерпретируются.
Нестандартные символы – внимание к деталям
Идентификаторы, содержащие нестандартные символы, требуют особого подхода к экранированию для корректной работы SQL-запросов.
Сравнение практик экранирования в разных СУБД
Представим примеры корректного экранирования идентификаторов в некоторых наиболее известных СУБД. Запомните, что последовательность и правильность в SQL всегда важны.
- MySQL (с режимом ANSI_QUOTES):
sql SELECT "order", "user" FROM "data";
- PostgreSQL и Oracle:
sql SELECT "order", "user" FROM "data";
- SQL Server:
sql SELECT [order], [user] FROM [data];
Пишите свой код ответственно, чтобы запросы были понятными и легкими для поддержки.
Полезные материалы
Данный раздел содержит ссылки на документацию с информацией о стандартах наименования, которые специфичны для различных СУБД. Это весьма полезно для разработчиков, работающих с несколькими SQL-системами на постоянной основе.