Как установить строки в верхний / нижний регистр в Юникоде?

Это в основном теоретический вопрос, который мне просто очень интересен. (Я не пытаюсь сделать это, кодируя это сам или что-то, я не изобретаю колеса.)

Мой вопрос заключается в том, как прописная / строчная таблица эквивалентности работает для Unicode.

Например, если бы мне пришлось сделать это в ASCII, я бы взял символ, и если он выпал бы в пределах диапазона [a-z], я бы суммировал разницу между A и a.

Если он не попадает в этот диапазон, у меня будет небольшая таблица эквивалентности для 10 или около того акцентированных символов плюс -. (Или я мог бы просто иметь массив полной эквивалентности с 256 записями, большинство из которых были бы такими же, как входные)

Тем не менее, я предполагаю, что есть лучший способ задания эквивалентностей в Юникоде, учитывая, что существуют сотни тысяч символов, и что теоретически можно добавить новый язык или набор символов (и я ожидаю, что вы не нужно будет исправлять окна, когда это произойдет).

Есть ли в Windows огромная жестко закодированная таблица эквивалентности для каждого символа? Или как это реализовано?

Смежный вопрос заключается в том, как SQL Server реализует Unicode-нечувствительные к регистру и нечувствительные к регистру запросы. Есть ли у него внутренняя таблица, которая сообщает, что все é è E E É и equivalent эквивалентны «e»?

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

Как быстро получить доступ к индексам? Индексирует ли уже значения, преобразованные в их «базовые» символы, соответствующие сопоставлению этого поля?

Кто-нибудь знает внутренности для этих вещей?

Спасибо!

Ответы на вопрос(4)

Ваш ответ на вопрос