Зачем вам нужна чувствительная к регистру база данных? - PullRequest
8 голосов
/ 07 июня 2010

Каковы некоторые причины выбора сопоставления с учетом регистра вместо нечувствительного к регистру?Я вижу, возможно, скромный прирост производительности для механизма БД при сравнении строк.Это оно?Если для ваших данных заданы все нижний или верхний регистр, то чувствительны к регистру, но это катастрофа, если вы сохраняете данные со смешанным регистром и затем пытаетесь запросить их.Затем вы должны сказать применить функцию lower () к столбцу, чтобы он соответствовал строковому литералу в нижнем регистре.Это предотвращает использование индекса в каждой БД, которую я использовал.Так интересно, почему кто-то использовал бы такую ​​опцию.

Ответы [ 5 ]

9 голосов
/ 07 июня 2010

Существует множество примеров данных с ключами, которые естественно чувствительны к регистру:

  • Файлы в чувствительной к регистру файловой системе, такой как Unix.
  • Имена, закодированные в Base-64 (я считаю,это то, что использует YouTube, как в ответе Артелиуса).
  • Символы в большинстве языков программирования.

Хранение чувствительных к регистру данных в нечувствительной к регистру системе создает риск несогласованности данных или дажепотеря важной информации.Хранение нечувствительных к регистру данных в чувствительной к регистру системе в худшем случае немного неэффективно.Как вы указали, если вы знаете только регистронезависимое имя искомого объекта, вам нужно скорректировать ваш запрос:

SELECT * FROM t WHERE LOWER(name) = 'something';

Я отмечу, что в PostgreSQL (и, вероятно, в других системах) просто создать индекс для выражения LOWER(name), который будет использоваться в таких запросах.

2 голосов
/ 07 июня 2010

Зависит от данных, которые вы хотите сохранить. Большинство файловых систем UNIX являются базами данных с ключами, чувствительными к регистру. Похоже, что видео на YouTube организовано с использованием клавиш, чувствительных к регистру.

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

1 голос
/ 07 июня 2010

Используйте регистр без учета регистра для вашего поля.В большинстве случаев вы не хотите манипулировать данными, чтобы найти их.

0 голосов
/ 07 октября 2010

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

Многие данные будут поступать из базы данных в хранимых процессах (с базой данных выполняется соединение), где чувствительность к регистру не является проблемой. Однако некоторые данные должны поступать из базы данных в виде отдельных запросов, а затем «сшиваться» в циклы - в основном из-за сложного типа данных, с которым SQL не может легко работать - и именно здесь возникла проблема. Когда я перебираю два набора результатов и пытаюсь объединить «код», значения Productcode и ProductCode естественно не совпадают.

Вместо того, чтобы исправлять данные, мне пришлось изменить свой код (C #), чтобы выполнить сопоставление строк без учета регистра. Заметьте, не во всем решении, а только при просмотре этих «кодов» на предмет соответствия.

Если бы у меня была чувствительная к регистру база данных, у меня был бы более аккуратный код.

Теперь, вместо того, чтобы «почему учитывается регистр», я действительно хотел бы знать, почему вы хотите базу данных без учета регистра. Это из-за лени? Я не вижу веской причины, по которой базы данных нечувствительны к регистру.

0 голосов
/ 07 июня 2010

Одна из причин - управление контентом. Обычно вам необходимо определить изменения в содержании, чтобы эти изменения можно было просмотреть, записать и опубликовать. Дело имеет значение для читабельного контента. «Дейв Доу» - это правильно. «Дейв Доу» совершенно не прав.

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

...