6

我打算编写一个使用 SQLite 作为后端的 iOS 应用程序。我的数据库包含越南文字,例如"Hải Sơn"。习惯于谷歌搜索的用户希望输入“hai son”之类的搜索词以找到上面的文字。我尝试了以下查询:

SELECT * FROM towns WHERE title LIKE '%hai son%';

我得到了 0 条记录。我如何使它工作?我知道谷歌和其他搜索引擎处理这种情况,所以可以做到。我也不想让我的用户输入带有完整变音符号的越南文文本,因为并非所有用户都知道如何这样做。

更新

我查看了 sqlite3 文档,看起来只有三个有效的排序规则序列:BINARY、NOCASE 和 RTRIM。我错过了什么吗?

更多信息

我的表是通过以下方式创建的:

CREATE TABLE towns ( sid INTEGER PRIMARY KEY NOT NULL, title TEXT )

到目前为止,我只使用 sqlite3 命令行从 CSV 文件创建数据库、表和导入文本。

我的 sqlite3 版本为 3.7.12

更新 2

Alias给了我一个想法:创建自己的整理序列。如果它有效,我将发布跟进。

4

2 回答 2

1

尝试这个:

SELECT * FROM towns WHERE title COLLATE UTF8CI LIKE '%hai son%';

与此处找到的答案相关:如何即时将列转换为 ASCII 而无需保存以检查是否与外部 ASCII 字符串匹配?

于 2013-06-09T06:23:28.467 回答
0

我知道这是旧线程,但我找到了解决方案,因此将其发布给其他人。如果您使用的是 sqlite3 库,您可以使用sqlite3_bind_text()

像下面

...
sqlite3_stmt *detailStmt;
NSString *t1=@"%%Hải Sơn%%";
const char *sql = "SELECT * FROM towns WHERE title LIKE ?";   
   if(sqlite3_prepare_v2(database, sql, -1, &detailStmt, NULL) == SQLITE_OK) 
   {  
    sqlite3_bind_text(detailStmt, 1, [t1 UTF8String], -1, SQLITE_TRANSIENT);
...
于 2014-04-02T06:53:21.400 回答