Frage

Ich habe eine Tableview (in Verbindung mit einer Datenbank) und eine Suchleiste. Wenn ich etwas in der Suchleiste eingeben, muß ich eine schnelle Suche in der Datenbank und die Ergebnisse anzuzeigen, wie ich geben.

Die Abfrage sieht wie folgt aus:

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

Alles funktioniert gut, solange ich nur ASCII-Zeichen verwendet werden. Was ich will, ist ASCII-Zeichen zu geben und sie äquivalent mit diakritischen Zeichen übereinstimmen. Zum Beispiel, wenn ich „Alizee“ geben würde ich erwarten, dass es „Alizée“ entsprechen.

Gibt es eine Möglichkeit die Abfrage locale unempfindliche machen zu tun? Ich habe rot über die COLLATE-Option in SQL, aber es scheint nicht von Nutzen zu sein, mit SQLite.I've auch Rot, das iPhone SDK 3.0 „Lokalisiert Sortierungs“ hat, aber ich konnte keine Dokumentation darüber erfahren, was das bedeutet .. .

Danke.

War es hilfreich?

Lösung

Es gibt ein paar Möglichkeiten zur Lösung dieses:

  1. Ersetzen aller akzentuierten Zeichen in der abfragen, vor der Ausführung es, z.B.

      

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

    Dies funktioniert jedoch nur für die Eingabe so Sie müssen sich nicht mit Akzent Zeichen haben in die Datenbank selbst. Einfache Lösung aber bei weitem nicht perfekt.

  2. Mit einer 3rd-Party-Bibliothek, nämlich ICU (Links unten). Nicht sicher, ob es die beste Wahl für iPhone though.

  3. Das Schreiben einer oder mehr benutzerdefinierte C-Funktionen, die den Vergleich tun. Mehr in den Links unten.

Ein paar Beiträge hier auf Stackoverflow, der die verschiedenen Möglichkeiten zu besprechen:
Wie mit bestimmten locale Text in sqlite3 sortieren?
Case-insensitive UTF-8-String Kollation für SQLite (C / C ++ )
Wie der Akzent / diakritische unempfindliche Suche in SQLite implementieren?

Auch ein paar externe Links:
SQLite und nativer UNICODE LIKE Unterstützung in C / C ++
SQLite Fall und Akzent unempfindliche Suche

Andere Tipps

Ich bin nicht sicher über SQL, aber ich denke, Sie auf jeden Fall die NSDiacriticInsensitivePredicateOption können im Speicher NSStrings zu vergleichen.

Ein Beispiel wäre ein NSArray voller Saiten Sie durchsuchen. Sie könnten nur das Array zu vergleichen Strings iterieren die NSDiacriticInsensitivePredicateOption als Vergleichsoption und die erfolgreichen Treffer.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top