このような照合は、現在のバージョンの SQLite では提供されていないと思います。そのため、最も賢明な計画は、クエリから並べ替えを削除し、代わりにスレッドのカルチャ情報のような構成要素を完全に制御およびアクセスできる純粋な .Net で後で並べ替えることです。
両方が同じプロセスで発生しているため、データセットが非常に大きい場合を除き、パフォーマンスの点で大きな違いはありません。
SQLite 3 ではユーザー定義の照合関数を使用できます。これらは SQLite.Net で .net 関数として実行できますが、管理対象/非管理対象の境界を越えて呼び出しを行うオーバーヘッドはかなりのものです。これは、 c++ でそれを実行しようとする1人です。C ++で他の誰かのよくテストされた安定したユニコードカルチャに依存するソートにアクセスできない限り、可能な場合は単純なソート後のアプローチに固執することをお勧めします。
もちろん、ユーザー定義の照合のパフォーマンスが現在のニーズに対して十分すぎる場合は、それを使用してください。
[SQLiteFunction(Name = "CULTURESORT", FuncType = FunctionType.Collation)]
class CultureSort : SQLiteFunction
{
public override int Compare(string param1, string param2)
{
return String.Compare(
param1,param2, CultureInfo.CurrentCulture, CompareOptions.IgnoreCase)
);
}
}
気に入った場合のスクリプトの投稿: ICU ライブラリを統合したSQLite の祝福されたビルドがあり、ordering/like/upper/lower で「適切な」ユニコード サポートを提供しますが、それをバッキングとして使用される sqlite コードに統合する必要があります。 .Net ラッパー。これは簡単なことではありません。