具有特殊字符(Accent character,é)的SQL查询未给出预期结果

时间:2014-07-24 13:24:50

标签: ios objective-c sqlite utf-8

这是我的实际查询:
从商店中选择id,name_en,name_fr,其中name_en喜欢“%l'é%”或description_en喜欢“%l'é%”按名称排序

它在sqlite浏览器中给出了正确的结果。 (仅供参考:稍微改变查询以在此处发布)

但是我们的sqlite3 API函数sqlite3_prepare_v2只接受 SQL语句,UTF-8编码。所以,我应该将上面的查询字符串转换为UTF-8字符指针。

我试图通过以下代码实现它,

const char * queryPointer = [finalQuery UTF8String];
int resultCode = sqlite3_prepare_v2(database, queryPointer, -1, &compileStatement, NULL);

但它给出了空结果集。在查看queryPointer后,我发现我的查询字符串中的é被一些不需要的字符替换。所以,我认为问题在于此。我相信这与编码有关。

我尝试了几种编码组合,下面是其中之一

NSData *dataOfParam1 = [sqlStatement dataUsingEncoding:NSISOLatin1StringEncoding];
NSString *unicodeStr1 = [[NSString alloc] initWithData:dataOfParam1 encoding:NSUTF8StringEncoding];
const char *unichar2 = [unicodeStr1 cStringUsingEncoding:NSUTF8StringEncoding];

我可能在错误的方向,所以也接受其他工作。

修改

实际上,finalQuery是静态搜索查询,除了 l'é,它是一个搜索字词。

第二次修改:

我发现一件有趣的事情是,如果我们正在搜索 L'E` (请注意案例差异),那么搜索工作正在进行中,我得到了结果。但我很惊讶为什么这是区分大小写的?同样的事情是在firefox的 SqliteManager 插件中工作而没有区分大小写的问题。

0 个答案:

没有答案