我正在尝试查询android中的SQLite数据库,其中带有重音符号的法语字符应该像普通的拉丁字符一样处理,例如:
SELECT * FROM x WHERE y LIKE %cafe%
应该返回
café, câfè, ...
我已经用Google搜索了一整天,并阅读了有关stackoverflow上的帖子的所有信息。 向表中添加包含规范化标题的列的可能性是没有选择的,因为数据库是从服务器获取并由第三方维护的。
使用其他帖子中提到的排序规则,例如
Latin1_general_CI_AI
也没有选项,因为SQLite只支持3个(在android 5中)排序规则,这对我没用。
将android中的数据库设置为
Locale.FRENCH
并使用整理
COLLATE LOCALIZED
也没有做到这一点。
我知道iOS(DiacriticInsensitiveSearch)中有一些标志可以自动完成,所以我希望这样的东西也适用于Android。
有什么想法吗?提前谢谢!
答案 0 :(得分:1)
向表中添加包含规范化标题的列的可能性是没有选择的,因为数据库是从服务器获取并由第三方维护的。
您可以使用规范化列创建单独的表,并为原始表创建外键。我认为这是你在android上使用sqlite的唯一选择。
或者,如果您可以以某种方式创建用户定义的函数remove_diacritics
,那么您将选择如下:
SELECT * FROM x WHERE remove_diacritics(lower(y))
LIKE remove_diacritics(lower(%cafe%))
但要注意x.y
上的索引不会被使用。您也可能不需要lower
。但据我所知,即使可能,在sqlite上创建函数也不是那么容易。