Phonegapを使用してiOS用の辞書アプリを作成しています。
データベースにアルファベット順のリストを照会するとき、私は以下を使用しますCOLLATE NOCASE
。
ORDER BY term COLLATE NOCASE ASC
これにより、小文字で始まる用語が末尾に追加されるという問題が解決されました(その質問から選択しました)。
ただし、öäüéêèのような非標準の文字は、最終的にはソートされます〜ここに2つの例:
Expected: Öffnungszeiten Oberved: Zuzahlung
Zuzahlung Öffnungszeiten
(or) clé cliquer sur
cliquer sur clé
私は周りを見回して、ここまたはここで議論されている同様の問題を見つけましたが、一般的なアドバイスは、ある種の拡張機能をインストールすることであるようです
この拡張機能はおそらくあなたを助けることができます...
...拡張機能としてICUを使用する
SQLiteはICUとの統合をサポートしています...
しかし、データベースが自分でホストされておらず、顧客のデバイスで実行されている状況にこれが当てはまるかどうかはわかりません。したがって、この拡張機能をアプリパッケージと一緒に出荷すると思います。
私はiOSにあまり精通していませんが、少なくとも複雑になると感じています。
また、公式フォーラムで私はそのヒントを見つけました:
SQLite does not properly handle accented characters.
そして、テキストの少し下に、ポスターはSQLiteのバグについて言及しています。
私が見つけたすべてのリンクは1年以上アクティブでなく、それらのどれも私が現在開発しているモバイル環境を扱っているようです。
それで、誰かが彼らのiOSプロジェクトで解決策を見つけたかどうか疑問に思いました。
ドキュメントには、デフォルトのCOLLATIONオプションは3つだけであると記載されています。
6.0照合シーケンス
SQLiteは2つの文字列を比較するときに、照合シーケンスまたは照合関数(同じものに対して2つの単語)を使用して、どちらの文字列が大きいか、または2つの文字列が等しいかどうかを判断します。SQLiteには、BINARY、NOCASE、およびRTRIMの3つの組み込みの照合機能があります。
BINARY - Compares string data using memcmp(), regardless of text encoding. NOCASE - The same as binary, except the 26 upper case characters of ASCII are folded to their lower case equivalents before the
比較が行われます。ASCII文字のみが大文字と小文字が折りたたまれていることに注意してください。SQLiteは、必要なテーブルのサイズが原因で、完全なUTFケースフォールディングを実行しようとしません。RTRIM-末尾のスペース文字が無視されることを除いて、バイナリと同じです。
今のところ、JavaScriptで並べ替えを行うのが最善の推測ですが、これでは全体的なパフォーマンスには何の影響も及ぼさないと思います。