Android,Diacritic Insensitive SQLite Search

Eli*_*ias 20 database sqlite android collation

我正在尝试查询android中的SQLite数据库,其中带有重音符号的法语字符应该像普通的拉丁字符一样处理,例如:

SELECT * FROM x WHERE y LIKE %cafe%
Run Code Online (Sandbox Code Playgroud)

应该回来

café, câfè, ...
Run Code Online (Sandbox Code Playgroud)

我已经用Google搜索了一整天,并阅读了有关stackoverflow上的所有帖子.向表中添加包含规范化标题的列的可能性是没有选择的,因为数据库是从服务器获取并由第三方维护的.

使用其他帖子中提到的排序规则

Latin1_general_CI_AI
Run Code Online (Sandbox Code Playgroud)

也没有选择,因为SQLite只支持3个(在android 5中)排序规则,这对我没用.

将android中的数据库设置为

Locale.FRENCH
Run Code Online (Sandbox Code Playgroud)

并使用整理

COLLATE LOCALIZED
Run Code Online (Sandbox Code Playgroud)

也没有做到这一点.

我知道iOS(DiacriticInsensitiveSearch)中有一些标志可以自动完成,所以我希望这样的东西也适用于Android.

有任何想法吗?提前致谢!

Oli*_*liv 1

无法向表中添加包含规范化标题的列,因为数据库是从服务器获取并由第三方维护的。

您可以使用规范化列和原始表的外键创建单独的表。我认为这是 Android 上 sqlite 的唯一选择。

或者,如果您可以以某种方式创建用户定义的函数remove_diacritics,那么您可以像这样选择:

SELECT * FROM x WHERE remove_diacritics(lower(y)) 
LIKE remove_diacritics(lower(%cafe%))
Run Code Online (Sandbox Code Playgroud)

但要注意 on 的索引x.y不会被使用。您也可能不需要lower。但据我所知,即使可能的话,在 sqlite 上创建函数也不是那么容易。