Question

J'ai une tableview (liée à une base de données) et une barre de recherche. Lorsque je tape quelque chose dans la barre de recherche, je fais une recherche rapide dans la base de données et affiche les résultats au fur et à mesure que je tape.

La requête ressemble à ceci:

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

Tout fonctionne bien tant que je n’utilise que des caractères ASCII. Ce que je veux, c'est taper des caractères ASCII et faire correspondre leur équivalent avec des signes diacritiques. Par exemple, si je tape " Alizee " Je m'attendrais à ce qu'il corresponde à "Alizée".

Existe-t-il un moyen de rendre la requête insensible aux paramètres régionaux? J'ai lu en rouge l'option COLLATE dans SQL, mais SQLite semble ne pas être utile. J'ai aussi dit en rouge que le SDK iPhone 3.0 contient un "classement localisé". mais je n’ai trouvé aucune documentation sur ce que cela signifie ...

Merci.

Était-ce utile?

La solution

Il existe quelques options pour résoudre ce problème:

  1. Remplacement de tous les caractères accentués dans le interroger avant de l'exécuter, par exemple

      

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

    mais cela ne fonctionne que pour l'entrée donc vous ne devez pas avoir des caractères accentués dans la base de données elle-même. Solution simple mais loin d'être parfait.

  2. Utilisation d’une bibliothèque tierce, à savoir ICU (liens ci-dessous). Je ne sais pas si c'est le meilleur choix pour l'iPhone.

  3. Écrire une ou plusieurs fonctions C personnalisées qui effectueront la comparaison. Plus dans les liens ci-dessous.

Quelques articles sur StackOverflow qui traitent des différentes options:
Comment trier le texte dans sqlite3 avec les paramètres régionaux spécifiés?
Classement de chaînes UTF-8 respectant la casse pour SQLite (C / C ++ )
Comment implémenter la recherche d'insensibilité accent / diacritique dans Sqlite?

Également quelques liens externes:
Prise en charge native et UNICODE LIKE de C UN C ++
des recherches insensible à la casse et à l'accent accentué

Autres conseils

Je ne suis pas sûr à propos de SQL, mais je pense que vous pouvez certainement utiliser NSDiacriticInsensitivePredicateOption pour comparer des chaînes NSS en mémoire.

Un exemple serait un tableau NSArray contenant les chaînes sur lesquelles vous effectuez une recherche. Vous pouvez simplement parcourir le tableau en comparant les chaînes en utilisant NSDiacriticInsensitivePredicateOption comme option de comparaison et en affichant les correspondances réussies.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top