Я собираюсь обратиться к части MS SQL Server этого вопроса, но «правильный» ответ на самом деле зависит от поддерживаемых языков и приложений.
При создании таблицы на SQL Server каждое текстовое поле имеет либо неявное, либо явно заданное сопоставление. Это влияет как на порядок сортировки, так и на поведение сравнения. По умолчанию для большинства английских (US) локалей является Latin1_General_CI_AS или Latin 1, нечувствительный к регистру, Accent-Sensitive. Это означает, что, например, a = A, но a! = Ä и a! = Ä.Вы также можете использовать без акцента (Latin1_General_CI_AI), который рассматривает все диакритические вариации «А» как равные.
Некоторые локали поддерживают другие категории сравнения; например, французские заказы, содержащие диакритические слова, несколько иначе, чем немецкий. Турецкий считает бесцеремонным i и пунктиром i семантически отличающимся, поэтому я и я не согласуются даже с нечувствительными к регистру сравнениями, если вы используете турецкую, не чувствительную к регистру, чувствительную к акценту сортировку.
Вы можете изменить сортировку по каждой базе данных, за таблицу, по полю и, с некоторой стоимостью, даже по запросу. Я понимаю, что индексы нормализуются в соответствии с указанным порядком сортировки, что означает, что в основном индекс сохраняет сглаженную версию исходной строки. Например, при нечувствительных к регистру коллаборациях Apple и яблоко хранятся в виде яблока. Запросы выравниваются с той же сортировкой перед поиском.
На японском языке существует другая категория нормализации, где символы полной ширины и полуширины, такие как ア = ア, а в некоторых случаях два символа полуширины сплющены до одного семантически эквивалентного символа (バ = バ). Наконец, для некоторых языков есть еще один шар воска с составными символами, где изолированные диакритические символы могут быть скомбинированы с другими символами (например, умлаут в ä является одним символом, составленным простой формой a). Вьетнамский, тайский и несколько других языков имеют вариации этой категории. Если есть каноническая форма, нормализация Юникода позволяет рассматривать составные и разложенные формы как эквивалентные. Нормализация Юникода обычно применяется до того, как будут сделаны какие-либо сравнения.
Подводя итог, для сравнения без учета регистра вы делаете что-то похожее на то, что вы делали при сравнении строк ASCII-диапазона: сгладить левую и правую стороны сравнения «в нижнем регистре» (например), а затем сравнить массив как двоичный массив. Разница в том, что вам нужно 1) нормализовать строки в одну и ту же форму юникода (kC или kD) 2) нормализовать строки в одном и том же случае в соответствии с правилами этой локали 3) нормализовать акценты в соответствии с акцентом правила чувствительности 4) сравнить в соответствии с двоичным сравнением 4) если применимо, например, в случае сортировки, сравнить с помощью дополнительных вторичных и тройных правил сортировки, которые включают в себя вещи, аналогичные вещам типа «Mc» до «M», на некоторых языках.
И да, Windows хранит таблицы для всех этих правил. Вы не получаете все по умолчанию в каждой установке, если вы не добавите поддержку для них с поддержкой поддержки восточноазиатского языка и комплексных скриптов с панели управления.
Я ожидаю, что вам нужно будет поменять окна, если они добавят новый набор символов в юникод, но это будет патч с очень низким приоритетом, поскольку изначально никто не будет использовать эти символы. – 2008-11-18 02:40:03
«Маленькая таблица эквивалентности для 10 или более акцентированных символов плюс -» - вам нужно понять, что «маленький» означает примерно в 100 раз больше, чем вы думали. – 2008-11-18 03:30:54