Domanda

Ho una vista tabella (collegata a un database) e una barra di ricerca. Quando scrivo qualcosa nella barra di ricerca, eseguo una rapida ricerca nel database e visualizzo i risultati durante la digitazione.

La query è simile alla seguente:

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

Tutto funziona bene finché uso solo caratteri ASCII. Quello che voglio è digitare caratteri ASCII e abbinare il loro equivalente con i segni diacritici. Ad esempio, se digito " Alizee " Mi aspetto che corrisponda a " Aliz & # 233; e " ;.

Esiste un modo per rendere la query non sensibile alle impostazioni locali? Ho rosso sull'opzione COLLATE in SQL, ma sembra che non sia utile con SQLite. Ho anche rosso che iPhone SDK 3.0 ha "quotation localized" ma non sono riuscito a trovare alcuna documentazione su cosa significhi ...

Grazie.

È stato utile?

Soluzione

Ci sono alcune opzioni per risolvere questo problema:

  1. Sostituzione di tutti i caratteri accentati nel file interrogare prima di eseguirlo, ad es.

      

    " Psych & # 233; d & # 233; Lices " = & Gt; & Quot; psychédélices "
      & Quot; & # 192; contre-courant " = & Gt; "Un concorrente"
      & Quot; Temp & # 234; TE " = & Gt; & Quot; Tempete "
      ecc.

    ma funziona solo per l'input non devi avere caratteri accentati in il database stesso. Soluzione semplice ma tutt'altro che perfetto.

  2. Uso di una libreria di terze parti, in particolare ICU (link sotto). Non sono sicuro che sia la scelta migliore per iPhone.

  3. Scrivere una o più funzioni C personalizzate che faranno il confronto. Altro nei link qui sotto.

Alcuni post qui su StackOverflow che discutono le varie opzioni:
Come ordinare il testo in sqlite3 con le impostazioni internazionali specificate?
Fascicolazione di stringhe UTF-8 maiuscole e minuscole per SQLite (C / C ++ )
Come implementare l'accent / diacritic insensitive search in Sqlite?

Anche un paio di link esterni:
Supporto SQLite e UNICODE LIKE nativo in C / C ++
ricerche sqlite senza accento e accento

Altri suggerimenti

Non sono sicuro di SQL, ma penso che tu possa sicuramente usare NSDiacriticInsensitivePredicateOption per confrontare NSStrings in memoria.

Un esempio potrebbe essere un NSArray pieno delle stringhe su cui stai cercando. Potresti semplicemente scorrere l'array confrontando le stringhe usando NSDiacriticInsensitivePredicateOption come opzione di confronto e visualizzando le partite riuscite.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top