2009-09-30 7 views
1

J'ai un db qui contient des caractères accent et je dois faire une recherche insensible à l'accent aussi vite que possible. J'ai essayé deux solutions:Sqlite3 insensible aux diacritiques iphone de recherche

  • requête toute combinaison d'accent possible. Par exemple: perchè percheronne Perché PERCHE PERCHE PERCHE PERCHE PERCHE PERCHE

  • rewrite opérateur LIKE où j'ai Reposer tous les caractères accentués avec leur normale, puis faire une comparaison respective, comme d'habitude.

Le premier est évidemment trop cher mais le second n'est pas assez bon.

Y at-il une solution qui me manque?

Merci Marco

Répondre

0

Quelques approches ather. Tout dépend de ce que vous pouvez faire sur votre base de données. Enlever tous les accents de votre base de données au moment de l'insertion ou dans une demande de pré-traitement

  • définir un opérateur sqlite qui supprime l'accent du champ avant la comparaison.
+0

Je ne peux pas modifier les données dans la base de données. Le remplacement de l'opérateur LIKE fait ce que vous avez suggéré, supprimer l'accent avant la comparaison. – Marco

+0

pouvez-vous définir un index sur le résultat de la suppression d'accent? Si c'est possible, vous devriez avoir une énorme amélioration des performances. – kriss

+1

J'ai négligé un détail dans mon commentaire précédent: l'opérateur like effectue-t-il la comparaison non accentuée comme le suggère le nom (ie: like (accentué, non accentué))? Si oui, ce n'est pas exactement ce que je propose. Si on pensait plus d'un opérateur non-actif et en utilisant des opérateurs de comparaison SQL communs. La différence entre les deux est qu'un paramètre non-actif peut être indexé, pas la forme similaire avec deux arguments. – kriss