我有一个tableview(链接到数据库)和一个搜索栏。当我在搜索栏中输入内容时,我会在数据库中快速搜索并在输入时显示结果。
查询如下所示:
SELECT * FROM MyTable WHERE name LIKE '%NAME%'
只要我只使用ASCII字符,一切正常。我想要的是输入ASCII字符并将它们的等价物与变音符号相匹配。例如,如果我输入“Alizee”,我希望它与“Alizée”匹配。
有没有办法让查询区分不敏感?我对SQL中的COLLATE选项很感兴趣,但SQLite似乎没有用。我也认为iPhone SDK 3.0有“Localized collation”,但是我无法找到任何关于这意味着什么的文档。
谢谢。
答案 0 :(得分:2)
有几种方法可以解决这个问题:
替换中的所有重音字符 在执行之前查询,例如
“Psychédélices”=> “Psychedelices”
“Àcontre-courant”=> “一个反对者” “Tempête”=> “Tempete”
等
但这仅适用于输入 你不能有重音字符 数据库本身。简单的解决方案但 远非完美。
使用第三方库,即ICU(下面的链接)。不确定它是否是iPhone的最佳选择。
编写一个或多个将进行比较的自定义C函数。更多链接如下。
StackOverflow上的一些帖子讨论了各种选项:
How to sort text in sqlite3 with specified locale?
Case-insensitive UTF-8 string collation for SQLite (C/C++)
How to implement the accent/diacritic insensitive search in Sqlite?
还有几个外部链接:
SQLite and native UNICODE LIKE support in C/C++
sqlite case and accent insensitive searches
答案 1 :(得分:0)
我不确定SQL,但我认为你绝对可以使用NSDiacriticInsensitivePredicateOption
来比较内存中的NSStrings。
一个例子是一个NSArray,其中包含您正在搜索的字符串。您可以使用NSDiacriticInsensitivePredicateOption
作为比较选项迭代数组比较字符串并显示成功的匹配。