Правила обработки регистров для разных СУБД

Работая с SQLDataService нужно обратить внимание на следующие особенности обработки регистров:

Oracle 11g и PostgreSQL 9.1

Идентификатор не экранирован при создании объекта CREATE TABLE Table1

Выборка с экранированием SELECT * FROM “Table1”

Условно допустима. Только при указании идентификатора в верхнем (ORACLE) или нижнем (PostgreSQL) регистре (SELECT * FROM “TABLE1”), т.к. так хранится при создании без экранирования. При остальных вариантах регистров объект не будет найден.

Выборка без экранирования SELECT * FROM Table1

Допустима. Идентификатор регистронезависим. Хранится и преобразуется в запросах к верхнему регистру (ORACLE) или к нижнему (PostgreSQL).

Идентификатор экранирован при создании объекта CREATE TABLE “Table1”

Выборка с экранированием SELECT * FROM “Table1”

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

Выборка без экранирования SELECT * FROM Table1

Условно допустима. Только если при создании идентификатор был указан в верхнем (ORACLE) или нижнем (PostgreSQL) регистре (CREATE TABLE “TABLE1”), т.к. так преобразуется в запросах без экранирования. При остальных вариантах регистров объект не будет найден.

Особенности для идентификаторов, содержащих символы кириллицы

Для Oracle 11g

Без особенностей. Обработка аналогична латинице.

Для PostgreSQL 9.1

Независимо от способа создания объекта (с экранированием/без) идентификатор будет регистрозависим. Обращаться к нему в запросах, также независимо от способа создания, можно как с экранированием, так и без, но строго с соблюдением регистра всех символов (какой был использован при создании).

Особенности использования ключевых слов в качестве идентификаторов

Можно использовать, но такой идентификатор, как при создании объекта, так и при использовании в запросах, должен быть экранирован. Т.е. всегда регистрозависим.

MSSQL 2012

Работа с регистрами в именах объектов выполняется в соответствии с настройкой Collation БД независимо от использования экранирования при создании объектов или в запросах. При указании CI (Case Insensitive) имена регистронезависимы. И в запросах создания, и в выборках регистры могут указываться произвольным образом. Экранирование также может применяться без ограничений. При указании CS (Case Sensitive) имена регистрозависимы. Регистры в запросах должны быть указаны точно как при создании, иначе - объект не будет найден. Экранирование также может применяться без ограничений. Параметр Collation БД задается при создании базы, или её ALTER. По умолчанию этот параметр совпадает с Collation для экземпляра SQL Server. У самого сервера, если не было задано иное, он по умолчанию CI.

Особенности для идентификаторов, содержащих символы кириллицы

Без особенностей. Обработка аналогична латинице.

Особенности использования ключевых слов в качестве идентификаторов

Можно использовать, но такой идентификатор, как при создании объекта, так и при использовании в запросах, должен быть экранирован (кавычками или квадратными скобками). Регистрозависимость, как и в общем случае, определяется только настройкой Collation БД.