Ordem SQLite Por lugares umlauts & caracteres falsos no final
Estou usando o Phonegap para fazer um aplicativo de dicionário para iOS.
Ao consultar o banco de dados para uma lista alfabética eu usoCOLLATE NOCASE
:
ORDER BY term COLLATE NOCASE ASC
Isso resolveu o problema de que os termos que começam com uma letra minúscula fossem acrescentados ao final (escolhidos a partir deaquela questão).
No entanto, caracteres não-padrão como öäüéêè ainda são classificados no final - aqui 2 exemplos:
Expected: Öffnungszeiten Oberved: Zuzahlung
Zuzahlung Öffnungszeiten
(or) clé cliquer sur
cliquer sur clé
Eu olhei em volta e encontrei assuntos semelhantes discutidosAqui ouAqui mas parece que o conselho geral é instalar algum tipo de extensão
Esta extensão provavelmente pode ajudá-lo ...
... use a UTI como uma extensão
O SQLite suporta integração com o ICU ...
Mas não tenho certeza se isso é aplicável na minha situação em que o banco de dados não está hospedado sozinho, mas em execução no dispositivo do cliente. Então eu acho que eu deveria enviar esta extensão com meu pacote de aplicativos.
Eu não estou muito familiarizado com o iOS, mas tenho a sensação de que seria complicado - pelo menos.
Também emo fórum oficial Eu encontrei essa dica:
SQLite does not properly handle accented characters.
e um pouco abaixo no texto, o cartaz menciona um bug no SQLite.
Todos os links que encontrei não estão ativos há mais de 1 ano e nenhum deles parece lidar com o ambiente móvel no qual estou desenvolvendo atualmente.
Então eu queria saber se alguém encontrou uma solução em seus projetos iOS.
A documentação afirma que eles são apenas 3 opções COLLATION padrão:
6.0 Sequencias de Agrupamento
Quando o SQLite compara duas strings, ele usa uma seqüência de intercalação ou uma função collating (duas palavras para a mesma coisa) para determinar qual string é maior ou se as duas strings são iguais. O SQLite possui três funções de agrupamento internas: BINARY, NOCASE e RTRIM.
BINARY - Compares string data using memcmp(), regardless of text encoding.
NOCASE - The same as binary, except the 26 upper case characters of ASCII are folded to their lower case equivalents before the
comparação é realizada. Note que apenas caracteres ASCII são dobrados em maiúsculas. O SQLite não tenta fazer a dobra completa do caso UTF devido ao tamanho das tabelas necessárias. RTRIM - O mesmo que binário, exceto que os caracteres do espaço à direita são ignorados.
Por enquanto, meu melhor palpite seria fazer a classificação em JavaScript, mas suspeito que isso não faria nada de bom para o desempenho geral.