Pergunta

Eu tenho um tableview (ligado a um banco de dados) e uma barra de pesquisa. Quando eu digitar algo na barra de pesquisa, I fazer uma rápida pesquisa no banco de dados e exibir os resultados como eu tipo.

Os olhares consulta como esta:

SELECT * FROM MyTable WHERE name LIKE '%NAME%'

Tudo funciona bem, desde que eu uso apenas caracteres ASCII. O que eu quero é digitar caracteres ASCII e para combinar com sua equivalente com sinais diacríticos. Por exemplo, se eu digitar "Alizee" Eu esperaria que corresponder "Alizée".

Existe uma maneira de fazer fazer a consulta locale-insensível? Eu vermelho sobre a opção COLLATE em SQL, mas não parece ser de nenhum uso com SQLite.I've também vermelha que iPhone SDK 3.0 tem "localizada agrupamento" mas eu era incapaz de encontrar qualquer documentação sobre o que isso significa .. .

Obrigado.

Foi útil?

Solução

Existem algumas opções para resolver esta:

  1. Substituir todos os caracteres acentuados no consulta antes de executá-lo, por exemplo

    "psychédélices" => "psychédélices"
    "À contre-courant" => "A contre-courant"
    "Tempête" => "Tempete"
    etc.

    mas isso só funciona para a entrada de modo você não deve ter caracteres acentuados em o próprio banco de dados. solução simples, mas longe de ser perfeito.

  2. Usando uma biblioteca parte 3, ou seja, UTI (links abaixo). Não tenho certeza se é a melhor escolha para iPhone embora.

  3. Escrevendo um ou mais funções personalizadas C que vai fazer a comparação. Mais nos links abaixo.

Há alguns posts aqui no StackOverflow que discutem as várias opções:
Como classificar texto em sqlite3 com especificado locale?
maiúsculas e minúsculas UTF-8 cadeia de agrupamento para SQLite (C / C ++ )
Como implementar a busca insensível sotaque / diacrítico no SQLite?

Também um par de links externos:
SQLite e suporte nativo Unicode como em C / C ++
sqlite caso e acento pesquisas insensíveis

Outras dicas

Eu não tenho certeza sobre o SQL, mas eu acho que você pode definitivamente usar o NSDiacriticInsensitivePredicateOption para comparar NSStrings na memória.

Um exemplo seria um NSArray completa das cordas que você está à procura de. Você poderia simplesmente iterar sobre o array comparando strings usando o NSDiacriticInsensitivePredicateOption como sua opção de comparação e exibir os jogos de sucesso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top