2

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

查询如下所示:

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

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

有没有办法使查询语言环境不敏感?我对 SQL 中的 COLLATE 选项感到不满,但 SQLite 似乎没有用。我也对 iPhone SDK 3.0 具有“本地化排序规则”感到不满,但我找不到任何有关这意味着什么的文档。 .

谢谢你。

4

2 回答 2

2

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

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

    "Psychédélices" => "Psychedelices"
    "À contre-courant" => "A contre-courant"
    "Tempête" => "Tempete"
    等等。

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

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

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

StackOverflow 上的一些帖子讨论了各种选项:
How to sort text in sqlite3 with specified locale?
SQLite 的不区分大小写的 UTF-8 字符串排序规则(C/C++)
如何在 Sqlite 中实现不区分重音/变音符号的搜索?

还有几个外部链接:
C/C++
sqlite case 和重音不敏感搜索中的 SQLite 和原生 UNICODE LIKE 支持

于 2009-12-15T22:04:24.420 回答
0

我不确定 SQL,但我认为您绝对可以使用NSDiacriticInsensitivePredicateOption来比较内存中的 NSString。

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

于 2009-06-17T12:49:45.263 回答