6

SQLite をバックエンドとして使用する iOS アプリを作成する予定です。私のデータベースには、 「Hải Sơn」などのベトナム語のテキストが含まれています。Google 検索に慣れているユーザーは、上記のテキストを見つけるために「ハイ ソン」などの検索語を入力したいと考えています。次のクエリを試しました。

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

そして、私は0レコードを得ました。これを機能させるにはどうすればよいですか?Google や他の検索エンジンがこのケースを処理することを知っているので、実行できます。また、すべてのユーザーがその方法を知っているわけではないため、ユーザーに完全な分音記号付きのベトナム語テキストを入力させたくありません。

アップデート

sqlite3 のドキュメントを調べたところ、有効な照合順序は BINARY、NOCASE、および RTRIM の 3 つだけのようです。私は何かを逃していますか?

より詳しい情報

私のテーブルは次のもので作成されました:

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 に答える