iPhone应用程序中的表查询

iPhone应用程序中的表查询,iphone,sqlite,internationalization,diacritics,Iphone,Sqlite,Internationalization,Diacritics,我有一个tableview(链接到数据库)和一个搜索栏。当我在搜索栏中键入内容时,我会在数据库中进行快速搜索,并在键入时显示结果 查询如下所示: SELECT * FROM MyTable WHERE name LIKE '%NAME%' 只要我只使用ASCII字符,一切正常。我想要的是键入ASCII字符,并将其等效字符与变音符号匹配。例如,如果我键入“Alizee”,我希望它与“alizeée”匹配 有没有办法使查询不区分区域设置?我对SQL中的COLLATE选项感到恼火,但似乎对SQLit

我有一个tableview(链接到数据库)和一个搜索栏。当我在搜索栏中键入内容时,我会在数据库中进行快速搜索,并在键入时显示结果

查询如下所示:

SELECT * FROM MyTable WHERE name LIKE '%NAME%'
只要我只使用ASCII字符,一切正常。我想要的是键入ASCII字符,并将其等效字符与变音符号匹配。例如,如果我键入“Alizee”,我希望它与“alizeée”匹配

有没有办法使查询不区分区域设置?我对SQL中的COLLATE选项感到恼火,但似乎对SQLite没有任何用处。我还对iPhone SDK 3.0具有“本地化的排序规则”感到恼火,但我找不到任何关于这意味着什么的文档


谢谢。

我不太清楚SQL,但我认为您完全可以使用
nsdiacriticinsensitivepredicteoption
来比较内存中的NSStrings


一个例子是一个NSArray,其中包含了您正在搜索的字符串。您可以使用
nsdiacriticinsensitivepredicteoption
作为比较选项,在数组上迭代比较字符串,并显示成功的匹配项。

有几个选项可以解决此问题:

  • 替换中的所有重音字符 在执行之前进行查询,例如

    “迷幻药”=>“迷幻药”
    “控制权”=>“控制权”
    “临时工”=>“临时工”
    等等

    但这只适用于输入,所以 你不能有重音字符 数据库本身。简单的解决方案,但 远非完美

  • 使用第三方库,即ICU(以下链接)。但不确定这是否是iPhone的最佳选择

  • 编写一个或多个自定义C函数来进行比较。更多信息请访问下面的链接

  • 这里有几篇关于StackOverflow的文章讨论了各种选项:


    还有几个外部链接:


    谢谢,但我的表最多有50000行,因此很遗憾,内存中的搜索不是一个选项。谢谢,我决定替换所有重音字符。顺便说一下,我喜欢你的例子