Это в основном теоретический вопрос, о котором мне очень любопытно. (Я не пытаюсь это сделать, кодируя его сам или что-то еще, я не изобретаю колеса).
Мой вопрос в том, как верхняя/нижняя регистр эквивалентности работает для Unicode.
Например, если бы мне пришлось сделать это в ASCII, я бы взял символ, и если он упадет с диапазоном [a-z], я бы суммировал разницу между A и a.
Если он не попадает в этот диапазон, у меня будет небольшая таблица эквивалентности для 10 или более акцентированных символов плюс. (Или я мог бы просто иметь полный массив эквивалентности с 256 элементами, большинство из которых было бы таким же, как и вход)
Однако я предполагаю, что есть лучший способ указать эквиваленты в Unicode, учитывая, что есть сотни тысяч символов, и что теоретически можно добавить новый язык или набор символов (и я ожидая, что вам не понадобится патч окна, когда это произойдет).
Есть ли у Windows огромная жестко закодированная таблица эквивалентности для каждого символа? Или как это реализовано?
Связанный вопрос заключается в том, как SQL Server реализует Unicode-основанные на акцентах и без учета регистра запросы. У него есть внутренняя таблица, в которой говорится, что é è è E É È и Ë эквивалентны "e"?
Это не звучит очень быстро, когда дело доходит до сравнения строк.
Как он быстро обращается к индексам? Он уже индексирует значения, преобразованные в их "базовые" символы, соответствующие этой сортировке полей?
Кто-нибудь знает внутренности для этих вещей?
Спасибо!