Названия каталога и схемы в ODBC чувствительны к регистру? - PullRequest
1 голос
/ 10 августа 2011

Насколько я знаю (поправьте меня, если я ошибаюсь), в именах таблиц ODBC регистр не учитывается.С другой стороны, поиск в Google не помог мне выяснить, чувствительны ли имена каталогов и схем к регистру.

Может ли кто-нибудь дать ссылку на спецификацию по этому вопросу?

1 Ответ

3 голосов
/ 10 августа 2011

Вы не должны полагаться на то, что имена таблиц нечувствительны к регистру в ODBC. Вы можете использовать вызовы ODBC SQLGetInfo, которые сообщают вам, чувствительны ли они к регистру, а также в верхнем или нижнем регистре. Некоторые базы данных / драйверы поддерживают случай, когда таблицы цитируются.

В MS SQL Server вы найдете имена таблиц без учета регистра, но в Oracle вы не найдете:

create table "fred" (a integer)
insert into "fred" values (1);
select * from fred
[S0002][unixODBC][Oracle][ODBC][Ora]ORA-00942: table or view does not exist
select * from "fred"
+-----------------------------------------+
| A                                       |
+-----------------------------------------+
| 1                                       |
+-----------------------------------------+
select * from "FRED"
[S0002][unixODBC][Oracle][ODBC][Ora]ORA-00942: table or view does not exist

Что на самом деле делает Oracle - это имена таблиц без кавычек в верхнем регистре:

SQL> create table fred (a integer)
SQLRowCount returns -1
SQL> insert into fred values (1)
SQLRowCount returns 1
SQL> select * from fred
+-----------------------------------------+
| A                                       |
+-----------------------------------------+
| 1                                       |
+-----------------------------------------+
SQLRowCount returns -1
1 rows fetched
SQL> select * from "FRED"
+-----------------------------------------+
| A                                       |
+-----------------------------------------+
| 1                                       |
+-----------------------------------------+
SQLRowCount returns -1
1 rows fetched
SQL> select * from "fred"
[S0002][unixODBC][Oracle][ODBC][Ora]ORA-00942: table or view does not exist

То же самое относится к именам схем и каталогов. Посмотрите на SQLGetInfo, и вы увидите, что драйвер может рассказать вам о том, что он делает. Найдите SQL_IDENTIFIER_CASE и SQL_IDENTIFIER_QUOTE_CHAR.

http://msdn.microsoft.com/en-us/library/ms711681(v=vs.85).aspx

Обратите внимание на «Поскольку идентификаторы в SQL-92 никогда не чувствительны к регистру, драйвер, который строго соответствует SQL-92 (любой уровень), никогда не вернет опцию SQL_IC_SENSITIVE, как поддерживается».

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