在SQLite Android中进行波斯语/阿拉伯语搜索会导致不良结果。

15

我在使用 SQLite 数据库时遇到了问题,似乎它不支持完整的波斯语/阿拉伯语字符。当我基于波斯语字符搜索某些字段时,大多数情况下 Sqlite 无法识别这些字符。

我通过从 HTML 文件中复制数据将其插入到数据库中。因此,当我输入字符串并进行搜索时,没有结果显示。但是,如果我复制该字符串并进行搜索,则可以找到结果。

来自 HTML 文件的字符串是:

"احكام خمس"

键入的字符串是:

"احکام خمس"


1
SQLite 不了解语言,它只是比较 Unicode 字符。请展示您认为应该匹配的字符串示例。 - CL.
1
我尝试在SQLite浏览器和Eclipse中选择一些字段。 但是对于某些单词,我没有得到结果。 这是我在SQLite浏览器中的查询: select part from table where season = 'خمس'; 似乎SQLite无法识别'خمس'。 但是当我搜索'طهارت'时,它给出了良好的结果。 我在Eclipse中做同样的事情,并得到相同的结果。 - hojjat reyhane
1
字符串是'خمس',我在搜索它。当我从表格单元格复制'خمس'时,它可以工作,但是当我手动输入时,没有结果返回。 - hojjat reyhane
尝试一下“احکام خمس”,看看是否有效!!! - hojjat reyhane
似乎SQLite在波斯/阿拉伯查询中有空格问题!!!此外,它还有一个与“ی”有关的问题。我替换了“ی”和“ي”,它可以工作。但我不知道如何修复空格问题。 - hojjat reyhane
显示剩余5条评论
3个回答

6

这些字符串是不同的。

HTML字符串以字符U+0627、U+062D和U+0643(Alef、Hah和Kaf)开头。

键入字符串的第三个字符不是U+0643,而是U+06A9(Keheh)。


哦,这太糟糕了!我的数据库中既有键入的数据,也有复制的数据,我不知道该如何解决。当我键入时,SQLite 无法显示复制的数据,而如果我复制,则无法显示键入的数据!!! - hojjat reyhane
2
好的,我找到了解决方案。在SQLite浏览器中,我应该将所有列中的阿拉伯字符替换为波斯字符,以便在输入时获得良好的结果。 更新表格设置列=替换(列,“ي”,“ی”); 更新表格设置列=替换(列,“ك”,“ک”); - hojjat reyhane

5

正如我所说,我搜索了很多,但是我无法解决我的问题。在上面的注释中,您可以看到我的完整问题。 - hojjat reyhane
@hojjatreyhane Sqlite支持UTF-16编码。我不是很了解UTF-16,但是UTF-16可以支持波斯语和阿拉伯语。你可以试一下。 - Amadas
@Amadas 实际上,SQLite 默认使用 UTF-8 编码(但这并不重要,因为 Android 库会自动转换 Java 字符串所使用的编码)。 - CL.

4

试试这个:

select part from table where season = N'خمس';

如果这不起作用,请尝试使用操作符like%
我已经在支持波斯语的项目中使用SQLite超过2年,而且在生产环境中没有任何问题。
更新:
我通过NHibernate使用SQLite。因此,我从未生成或编写查询。老实说,我从来没有注意到NHibernate如何将查询发送到SQLite

1
在SQLite浏览器中,当我在字符串前面加上N时,它会崩溃。我尝试使用like,但结果类似。也许在Eclipse中会起作用!!! - hojjat reyhane

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接