iPhone应用程序中的表查询

时间:2009-06-17 08:03:11

标签: iphone sqlite internationalization diacritics

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

查询如下所示:

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

只要我只使用ASCII字符,一切正常。我想要的是输入ASCII字符并将它们的等价物与变音符号相匹配。例如,如果我输入“Alizee”,我希望它与“Alizée”匹配。

有没有办法让查询区分不敏感?我对SQL中的COLLATE选项很感兴趣,但SQLite似乎没有用。我也认为iPhone SDK 3.0有“Localized collat​​ion”,但是我无法找到任何关于这意味着什么的文档。

谢谢。

2 个答案:

答案 0 :(得分:2)

有几种方法可以解决这个问题:

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

      

    “Psychédélices”=> “Psychedelices”
      “Àcontre-courant”=> “一个反对者”   “Tempête”=> “Tempete”
      等

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

  2. 使用第三方库,即ICU(下面的链接)。不确定它是否是iPhone的最佳选择。

  3. 编写一个或多个将进行比较的自定义C函数。更多链接如下。

  4. 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作为比较选项迭代数组比较字符串并显示成功的匹配。