Como você define cadeias de caracteres para maiúsculas / minúsculas no Unicode?

Esta é principalmente uma questão teórica da qual estou muito curiosa. (Não estou tentando fazer isso codificando sozinho ou algo assim, não estou reinventando as rodas.)

Minha pergunta é como a tabela de equivalência em maiúsculas / minúsculas funciona para Unicode.

Por exemplo, se eu tivesse que fazer isso em ASCII, pegaria um caractere e, se ele cair dentro do intervalo [a-z], somaria a diferença entre A e a.

Se não cair nesse intervalo, eu teria uma pequena tabela de equivalência para os 10 caracteres acentuados mais ñ. (Ou, eu poderia ter apenas uma matriz de equivalência completa com 256 entradas, a maioria das quais seria igual à entrada)

No entanto, acho que existe uma maneira melhor de especificar as equivalências no Unicode, já que existem centenas de milhares de caracteres e, teoricamente, um novo idioma ou conjunto de caracteres pode ser adicionado (e espero que você não precisaria consertar janelas quando isso acontecer).

O Windows possui uma enorme tabela de equivalência codificada para cada caractere? Ou como isso é implementado?

Uma questão relacionada é como o SQL Server implementa consultas sem distinção de sotaque e sem distinção de maiúsculas e minúsculas. Ele possui uma tabela interna que informa que é é E é e são equivalentes a "e"?

Isso não soa muito rápido quando se trata de comparar strings.

Como ele acessa os índices rapidamente? Ele já indexa valores convertidos em seus caracteres "base", correspondentes ao agrupamento desse campo?

Alguém conhece os internos para essas coisas?

Obrigado!

questionAnswers(4)

yourAnswerToTheQuestion