20

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

SELECT * FROM x WHERE y LIKE %cafe%

应该返回

café, câfè, ...

我已经用谷歌搜索了一整天,并阅读了关于 stackoverflow 的所有相关帖子。无法向表中添加包含规范化标题的列,因为数据库是从服务器获取并由第三方维护的。

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

Latin1_general_CI_AI

也没有选择,因为 SQLite 仅支持 3(在 android 5 中)对我没有帮助的排序规则。

将android中的数据库设置为

Locale.FRENCH

并使用排序规则

COLLATE LOCALIZED

也没有成功。

我知道 iOS (DiacriticInsensitiveSearch) 中有一些标志会自动执行,所以我希望这样的东西也可用于 android。

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

4

1 回答 1

1

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

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

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

SELECT * FROM x WHERE remove_diacritics(lower(y)) 
LIKE remove_diacritics(lower(%cafe%))

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

于 2012-10-08T07:34:54.677 回答