sqlite中的重音搜索(android)

sqlite中的重音搜索(android),android,sqlite,android-sqlite,Android,Sqlite,Android Sqlite,我有一个专栏,其中一些元素包含重音字母。 格拉姆布 我的要求是,当我搜索“Grambu”时,我也应该在结果中得到“Grambu” 对于这个需求,我尝试为特定列使用“collatenocase”参数。 但这不起作用 当我在网上搜索解决方案时,我发现很多人建议规范重音字符 并在此基础上创建另一列作为唯一选项 这个问题还有其他更简单的解决方法吗?COLLATE NOCASE有效 使用和使用COLLATE LOCALIZED将数据库的区域设置设置为具有重音字符支持的区域设置 您也可以尝试使用。 但是要小

我有一个专栏,其中一些元素包含重音字母。 格拉姆布

我的要求是,当我搜索“Grambu”时,我也应该在结果中得到“Grambu”

对于这个需求,我尝试为特定列使用“collatenocase”参数。 但这不起作用

当我在网上搜索解决方案时,我发现很多人建议规范重音字符 并在此基础上创建另一列作为唯一选项


这个问题还有其他更简单的解决方法吗?

COLLATE NOCASE
有效

使用和使用
COLLATE LOCALIZED
将数据库的区域设置设置为具有重音字符支持的区域设置

您也可以尝试使用。 但是要小心这个错误:

检查Android中提到的这两个collator

也可以看看这个。

(一个错误:SQLite默认情况下只理解ASCII字符的大小写。对于超出ASCII范围的unicode字符,LIKE运算符默认情况下区分大小写。例如,表达式'A'LIKE'A'为TRUE,而'æ'LIKE'Æ'为FALSE。)


在Android sqlite中,
GLOB
一样忽略
COLLATE本地化
COLLATE UNICODE
。但是,有一种解决方案不必向表中添加额外的列。正如@asat在中所解释的,您可以将
GLOB
与一个模式一起使用,该模式将用该字母的所有可用替代字母替换每个字母。在Java中:

public static String addTildeOptions(String searchText) {
    return searchText.toLowerCase()
                     .replaceAll("[aáàäâã]", "\\[aáàäâã\\]")
                     .replaceAll("[eéèëê]", "\\[eéèëê\\]")
                     .replaceAll("[iíìî]", "\\[iíìî\\]")
                     .replaceAll("[oóòöôõ]", "\\[oóòöôõ\\]")
                     .replaceAll("[uúùüû]", "\\[uúùüû\\]")
                     .replace("*", "[*]")
                     .replace("?", "[?]");
}
然后(当然不是字面上的意思):

这样,搜索Grambu或Grambú的用户将把搜索转换为Gramb[uú249;üú],并返回两个结果

需要注意的是,
GLOB
忽略了
COLLATE NOCASE
,这就是为什么我将函数和查询中的所有内容都转换为小写。还请注意,sqlite中的
lower()
函数对非ASCII字符不起作用,但这些字符可能已经被替换了


该函数还用“转义”版本替换了
GLOB
通配符、
*

感谢您的重播。我在任何地方都找不到“COLLATE LOCALE”。我所能找到的只是整理二进制、NOCASE和RTRIM。@RojilThomas抱歉,这是一个打字错误。编辑了我的答案。在title='Grambu'的情况下,COLLATE LOCALIZED对我有效,但当查询的标题类似于“%Grambu%”时,我无法得到结果。因此,我的理解是,这里的COLLATE不能与LIKE一起使用,我必须使用第二个标准化列。您好,我们需要在哪里使用它?
SELECT * from table WHERE lower(column) GLOB "*addTildeOptions(searchText)*"