gpt4 book ai didi

iphone - 在iPhone上使用sqlite3_create_collat​​ion

转载 作者:行者123 更新时间:2023-12-03 18:17:26 24 4
gpt4 key购买 nike

我想创建一个排序规则,以使其不区分大小写,并且在数据库中没有重音符号搜索。

这是我的代码:

static int sqlite3NoCaseNoAccentCollate(void * foo, int ll, const void *l, int rl,
const void *r){
NSLog(@"comparing");
NSString *left = [NSString stringWithCharacters:l length:ll];
NSString *right = [NSString stringWithCharacters:r length:rl];
NSComparisonResult rs = [left compare:right options:NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch|NSForcedOrderingSearch];

NSLog("%d",rs);
return rs;
}


sqlite3 *db;
if (SQLITE_OK==sqlite3_open([pathToDataBase UTF8String], &db)){
sqlite3_create_collation(db, "MYNOCASENOACCENT", SQLITE_UTF8, NULL, &sqlite3NoCaseNoAccentCollate);
}


当我执行此查询时:

SELECT ('teste' LIKE 'testé' COLLATE MYNOCASENOACCENT)


它返回0而不是1,并且永远不会调用我的自定义函数(我将断点放在函数中进行测试)。

当我使用“ PRAGMA collat​​ion_list”列出所有归类时,我的自定义归类存在。

有什么问题的想法吗?

最佳答案

可能为时已晚,因此请简要介绍一下:

您定义了整理功能。将用于比较指定排序规则的表列。如您所见,它将不会应用于类似运算符。

您需要做的是定义和注册一个类似的函数,例如

static void utf8likeFunc(sqlite3_context *context, int argc, sqlite3_value **argv)
{
//...
}

sqlite3_create_function(db, "like", 2, SQLITE_UTF8, (void*)&likeInfoNorm, utf8likeFunc, 0, 0);


可以在sqlite来源中找到类似函数的样本。

关于iphone - 在iPhone上使用sqlite3_create_collat​​ion,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14688695/

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