20

アクセント付きのフランス語文字を通常のラテン文字のように処理する必要がある Android の SQLite データベースにクエリを実行しようとしています。次に例を示します。

SELECT * FROM x WHERE y LIKE %cafe%

戻るべき

café, câfè, ...

私は丸一日グーグルで検索し、stackoverflow に関するすべての投稿を読みました。データベースはサーバーから取得され、サードパーティによって維持されるため、正規化されたタイトルを含むテーブルに列を追加することはできません。

次のような他の投稿で言及されている照合を使用する

Latin1_general_CI_AI

SQLiteは私を助けない3つの(Android 5で)照合のみをサポートするため、オプションもありません。

Androidのデータベースをに設定する

Locale.FRENCH

および照合の使用

COLLATE LOCALIZED

また、トリックを行いません。

iOS(DiacriticInsensitiveSearch)に自動的に実行されるフラグがあることは知っているので、このようなものがAndroidでも利用できることを願っています。

何か案は?前もって感謝します!

4

1 に答える 1

1

データベースはサーバーから取得され、サードパーティによって維持されるため、正規化されたタイトルを含むテーブルに列を追加することはできません。

正規化された列と元のテーブルへの外部キーを持つ別のテーブルを作成できます。これは、Androidでsqliteを使用する唯一のオプションだと思います。

または、何らかの方法でユーザー定義関数を作成できる場合はremove_diacritics、次のように選択します。

SELECT * FROM x WHERE remove_diacritics(lower(y)) 
LIKE remove_diacritics(lower(%cafe%))

ただし、インデックスx.yが使用されないことに注意してください。も必要ないかもしれませんlower。しかし、私が知る限り、関数を作成することは、可能な場合でも sqlite でそれほど簡単ではありません。

于 2012-10-08T07:34:54.677 に答える