Hra*_*afn 5 sqlite string objective-c nsstring ios
我目前正在开发一个具有全文搜索功能的IOS应用程序.通过在sqlite数据库上执行select语句来执行搜索,但问题是数据库中的许多值包含斯堪的纳维亚字母(Æ,Ö,Á等),并且我在转换语句时遇到问题而没有获取十六进制值为了这些信件.
这是我目前正在做的事情:
const char *sql = [[NSString stringWithFormat:
@"SELECT %@\
FROM Customer c\
JOIN Customer_Metadata cm ON c.CustomerId = cm.CustomerId\
WHERE cm.Name LIKE '%%%@%%'\
ORDER BY cm.Name", kCustomerSelect, searchString] UTF8String];
Run Code Online (Sandbox Code Playgroud)
现在kCustomerSelect是一个包含我想要选择的列的常量,而searchString包含用户输入.
这就像普通拉丁字母的魅力,但如果我传给Ö,作为searchString,我得到st\xc3\xb6.我知道简单地注销UTF8编码的字符串将无法正确表示字符串,但问题是我的select语句没有给我任何结果.
我在执行查询之前调用sqlite3_open()并从SQLite文档中调用*"如果调用sqlite3_open()或sqlite3_open_v2(),则数据库的默认编码为UTF-8,如果是sqlite3_open16,则为本机字节顺序的UTF-16 () 用来."*.
我已经通过更换使用不同的编码尝试UTF8String与cStringUsingEncoding:和尝试不同的编码.他们都没有工作(不是我期待他们,但至少想尝试).
任何和所有帮助或提示,将不胜感激.
编辑 我现在尝试使用SQLite数据库浏览器在数据库上运行相同的select语句,但没有得到任何结果.这让我相信这可能与我使用FTS3创建我的Customer_Metadata表有关.
MrDresden
如果您使用 FTS3,默认分词器不会执行您想要的操作。
除非将特定标记生成器指定为用于创建 FTS 表的 CREATE VIRTUAL TABLE 语句的一部分,否则将使用默认标记生成器“simple”。简单标记器根据以下规则从文档或基本 FTS 全文查询中提取标记:
术语是合格字符的连续序列,其中合格字符是所有字母数字字符以及 Unicode 代码点值大于或等于 128 的所有字符。将文档拆分为术语时,所有其他字符都将被丢弃。他们唯一的贡献是分隔相邻的术语。
-- http://www.sqlite.org/fts3.html#tokenizer
您需要使用自定义标记生成器,或者查看 icu 或 unicode61 标记生成器是否适合您。有关这些的信息位于上面的链接文档中。
| 归档时间: |
|
| 查看次数: |
1234 次 |
| 最近记录: |