Java SQLite带LIKE语句的大小写重音符号
我的android联系人列表中存储了这4个联系人,这是一个SQLite数据库Java SQLite带LIKE语句的大小写重音符号,java,android,sqlite,Java,Android,Sqlite,我的android联系人列表中存储了这4个联系人,这是一个SQLite数据库 António Meireles AntÓnio Pinto Ágata Silva ágata Pereira 如果我执行: select _id, display_name from raw_contacts where upper(display_name) like upper('%antó%') select _id, display_name from raw_contacts where upper(
António Meireles
AntÓnio Pinto
Ágata Silva
ágata Pereira
如果我执行:
select _id, display_name from raw_contacts where upper(display_name) like upper('%antó%')
select _id, display_name from raw_contacts where upper(display_name) like upper('%á%')
我得到的是安东尼奥·梅雷莱斯,而不是两个安东尼奥
如果我执行:
select _id, display_name from raw_contacts where upper(display_name) like upper('%antó%')
select _id, display_name from raw_contacts where upper(display_name) like upper('%á%')
我得到的是佩雷拉,而不是两个
这里怎么了?upper()
函数是否应该使其两侧完全相同,并同时返回António
s和Ágata
s
当我试图使我的搜索不区分大小写时,当重音进入等式时,这种情况就发生在我身上。根据我的阅读,建议将两者(比较器和要比较的字符串)都放在大写或小写,两个字符串都会匹配,但在我的情况下不会发生这种情况。根据,about LIKE子句:
任何其他字符都匹配自身或其大小写等效项
(即不区分大小写的匹配)
但是有一个bug注释:
SQLite只能通过以下方式理解ASCII字符的大写/小写
违约对于unicode,LIKE运算符默认区分大小写
超出ASCII范围的字符。例如
像“a”一样的“a”是真的,但像“Æ”一样的“æ”是假的
因此,您可能必须省略大写子句,并通过在where子句中添加或大小写来处理非ASCII字符的大写
i、 e
如果您可以影响数据库模式和进入其中的数据,请参阅@laalto。我以前见过这个示例,但不幸的是,我无法将其应用到我的案例中,因为我正在直接处理Android的联系人存储数据库。这不是我自己的数据库。是的,我怀疑会是这样,并没有标记为重复。我现在还不知道答案,也没有时间去试验。