Почему оракул чувствителен к регистру?

Если проблема заключается в дополнительном времени компиляции и раздувании бинарного размера, полученном путем компиляции .h как части всех используемых им .cpp-модулей, во многих случаях то, что вы можете сделать, - это сделать класс шаблона опустившимся из не-шаблонного базовый класс для не зависящих от типа частей интерфейса, и что базовый класс может иметь свою реализацию в файле .cpp.

41
задан Möoz 2 December 2016 в 03:17
поделиться

5 ответов

По умолчанию идентификаторы Oracle (имена таблиц, имена столбцов и т. Д.) Нечувствительны к регистру . Вы можете сделать их чувствительными к регистру, используя кавычки вокруг них (например: SELECT * FROM "My_Table" WHERE "my_field" = 1). Ключевые слова SQL (SELECT, WHERE, JOIN и т. Д.) Всегда нечувствительны к регистру.

С другой стороны, сравнения строк чувствительны к регистру (например: WHERE field='STRING' будет соответствовать столбцам только там, где 'STRING') по умолчанию. Вы можете сделать их нечувствительными к регистру, установив для NLS_COMP и NLS_SORT соответствующие значения (например, LINGUISTIC и BINARY_CI соответственно).

Примечание. При запросе представлений словаря данных (например, dba_tables) имена будут в верхнем регистре, если вы создали их без кавычек, и здесь будут применяться правила сравнения строк, описанные во втором абзаце.

Некоторые базы данных (Oracle, IBM DB2, PostgreSQL и т. Д.) Будут выполнять сравнение строк с учетом регистра по умолчанию, другие без учета регистра (SQL Server, MySQL, SQLite). Это ни в коем случае не стандартно, так что просто знайте, каковы ваши настройки дБ.

67
ответ дан NullUserException 2 December 2016 в 03:17
поделиться

Oracle фактически обрабатывает имена полей и таблиц без учета регистра, если только вы не используете кавычки вокруг идентификаторов. Если вы создадите таблицу без кавычек вокруг имени, например, CREATE MyTable ..., полученное имя таблицы будет преобразовано в верхний регистр (т.е. MYTABLE) и будет обрабатываться без учета регистра. SELECT * из MYTABLE, SELECT * из MyTable, SELECT * из myTabLe будут соответствовать MYTABLE (обратите внимание на отсутствие кавычек вокруг имени таблицы). Вот хорошая статья по этому вопросу , в которой обсуждается этот вопрос более подробно и сравниваются базы данных.

7
ответ дан David Taylor 2 December 2016 в 03:17
поделиться

Имейте в виду, что для SQL Server чувствительность к регистру основывается на сопоставлении. Параметры сортировки по умолчанию не чувствительны к регистру, но их можно изменить, чтобы они учитывали регистр. Аналогичным примером является то, почему в базах данных Oracle по умолчанию используется западноевропейский набор символов, когда UTF требуется для глобальных приложений, которые используют символы не ASCII? Я думаю, что это просто предпочтение поставщика.

3
ответ дан tsells 2 December 2016 в 03:17
поделиться

Если бы мне пришлось угадывать, я бы сказал, по причинам исторической / обратной совместимости.
Oracle впервые появился в 1977 году, и, вероятно, с технологией того времени вычислительно дорого было делать дополнительную работу для поиска без учета регистра, поэтому они просто выбрали точное совпадение.

3
ответ дан Gerrat 2 December 2016 в 03:17
поделиться

Для некоторых приложений важна чувствительность к регистру, а для других - нет. Независимо от того, какую СУБД вы используете, бизнес-требования должны определять, нужно ли вам учитывать регистр или нет. Я бы не стал слишком беспокоиться о «дефолте».

0
ответ дан nvogel 2 December 2016 в 03:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: