gpt4 book ai didi

android - 如何忽略 SQLite 查询中的重音(Android)

转载 作者:IT王子 更新时间:2023-10-28 23:29:32 32 4
gpt4 key购买 nike

我是 Android 新手,我正在使用 SQLite 进行查询。我的问题是,当我在字符串中使用重音时,例如

  • 阿拉蕾
  • 咻咻
  • ÀÀÀ
  • ààà
  • 啊啊
  • AAA

如果我这样做:

SELECT * FROM TB_MOVIE WHERE MOVIE_NAME LIKE '%a%' ORDER BY MOVIE_NAME;

回来了:

  • AAA
  • aaa(忽略其他)

但如果我这样做:

SELECT * FROM TB_MOVIE WHERE MOVIE_NAME LIKE '%à%' ORDER BY MOVIE_NAME;

回来了:

  • ààà(忽略标题“ÀÀÀ”)

我想在 SQLite DB 中选择字符串而不关心重音和大小写。请帮忙。

最佳答案

通常,SQL 中的字符串比较由列或表达式 COLLATE 规则控制。在 Android 中,只有三个排序规则是 pre-defined :二进制(默认)、本地化和 UNICODE。它们都不适合您的用例,很遗憾,用于安装新排序规则函数的 C API 没有在 Java API 中公开。

要解决这个问题:

  1. 在表格中添加另一列,例如 MOVIE_NAME_ASCII
  2. 将值存储到此列中,删除重音符号。您可以通过将字符串规范化为 Unicode 范式 D (NFD) 并删除非 ASCII 代码点来删除重音,因为 NFD 将重音字符大致表示为纯 ASCII + 组合重音标记:

    String asciiName = Normalizer.normalize(unicodeName, Normalizer.Form.NFD)
    .replaceAll("[^\\p{ASCII}]", "");
  3. 在此 ASCII 规范化列上进行文本搜索,但显示原始 unicode 列中的数据。

关于android - 如何忽略 SQLite 查询中的重音(Android),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16282083/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com