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

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

Есть ли причина, по которой Oracle чувствительна к регистру, и другие, такие как SQL Server, и MySQL не по умолчанию?

Я знаю, что есть способы включить/отключить чувствительность к регистру, но кажется странным, что оракул отличается от других баз данных.

Я также пытаюсь понять причины чувствительности к регистру. Я вижу, где "Таблица" и "TaBlE" можно считать эквивалентными и не эквивалентными, но есть ли пример, когда чувствительность к регистру действительно могла бы иметь значение?

Я немного новичок в базах данных и в настоящее время занимаюсь классом.

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

Ответ 3

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

Ответ 4

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

Ответ 5

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