SQLite 中的越南 Unicode 文本搜索

6

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

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

我没有获得任何记录,该怎么办?我知道Google和其他搜索引擎可以处理这种情况,所以它是可以完成的。我也不希望让我的用户输入越南文本时加上完整的变音符号,因为并不是所有用户都知道如何做到这一点。

更新

我查看了sqlite3文档,似乎只有三种有效的排序序列:BINARY、NOCASE和RTRIM。我错过了什么吗?

更多信息

我的表是用以下命令创建的:

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

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

我的sqlite3版本是3.7.12

更新2

Alias 给了我一个想法:创建自己的排序序列。如果成功,我会发表后续文章。

2个回答

1

我尝试了您提供的命令行版本解决方案(来自Mac OS X的sqlite3),但是出现了以下错误:错误:没有这样的排序序列:utf8_general_ci - Hai Vu
如果您尝试将其替换为COLLATE UTF8CI会怎样? - Aiias
@HaiVu - 看起来这是SQLite3用户常见的问题。在几篇帖子中提到的一个解决方法是在表中添加另一列,该列包含文本的ASCII版本。这里有一个很好的讨论SQLite Create function / non-ascii case insensitive - Aiias

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);
...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接