无法在带有目标C的SQLite中执行不区分重音/变音符号的搜索

克里斯·希夫豪尔(Chris Schiffhauer)

我正在尝试根据在SO和其他地方找到的各种示例来组合解决方案。

我有一个SQLite数据库,其中的一列带有重音字符串,即église我要搜索eglise匹配项église

我在实现之外有一个用户定义的函数:

void withoutDiacritics(sqlite3_context *context, int argc, sqlite3_value **argv)
{
    if (argc != 1 || sqlite3_value_type(argv[0]) != SQLITE_TEXT) {
        sqlite3_result_null(context);
        return;
    }

    @autoreleasepool {
        NSMutableString *string = [NSMutableString stringWithUTF8String:(const char *)sqlite3_value_text(argv[0])];
        CFStringTransform((CFMutableStringRef)string, NULL, kCFStringTransformStripCombiningMarks, NO);
        sqlite3_result_text(context, [string UTF8String], -1, SQLITE_TRANSIENT);
    }
}

在查询之前,我创建函数:

sqlite3_create_function_v2(db, "WithoutDiacritics", 1, SQLITE_ANY, NULL, &withoutDiacritics, NULL, NULL, NULL);

最后,我查询一个FTS3虚拟表:

SELECT * FROM vTerms WHERE WithoutDiacritics(MasterField) MATCH '*eglise*'

不幸的是,即使eglise表中没有任何重音符号,也不会返回任何内容

如何将我的函数应用于数据库列?

PS我已经探讨了备份的可能性,其中包括不带变音符号的列即可进行快速搜索。它运作良好,但是较大的数据库大小使我超出了iOS App Store的100mb下载限制。

CL。

FTS表不使用归类;您需要使用其他标记符,例如ICU或UNICODE61,或编写自定义标记符。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

带有拉丁六音变音符号的网址(php)

带有重音符号的文件夹中的Java安装(变音符号)

Mailchimp API:无法在属性中触发带有变音符号的事件

变音符号不区分大小写的搜索环回

读取Java中带有重音符号的文件

c ++读取带有重音符号的文件

使用`locate`命令搜索变音符号/重音符号

搜索带有重音符的文件中的文本

带有重音符号的列

具有字母范围的PATINDEX排除变音符号(带重音符号)

在JavaScript中删除字符串中的重音符号/变音符号

如何从.NET中的字符串中删除变音符号(重音符号)?

Power Query:如何从文本中删除变音符号/重音符号

从拉丁字符中删除重音符号(变音符号)以进行比较

python中字符串的变音符号/重音符号的替换

删除Kotlin中的重音符号和变音符号

Python:德国元音变音符号的文件名

使用正则表达式剥离字符失败,而使用带有变音符号,撇号,重音符号等的文字字符

为什么 sed/grep 不匹配带有变音符号的单词?

Python:删除希腊变音符号/重音符号

无法通过PDO_ODBC从Access中检索带有UTF-8重音符号的字符

无法在Windows 8上的PuTTY中直接输入带有变音符号的Unicode字符

如何从php中的字符串中获取带有变音符号的字符?

无法处理Elasticsearch索引和搜索中的重音符号

无法将带有重音符号的文件复制到Mac OS

icCube报表:无法保存带有重音符号的报表

PHP导入带有变音符号的CSV

preg_match还带有变音符号?

包含带有批处理的变音符号的打开URL