这是我的实际查询:
从商店中选择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 插件中工作而没有区分大小写的问题。