新しい照合シーケンスを定義できます。sqlite からのソートを解決したい場合は、新しい照合シーケンスの定義を参照してください。System.Data.SQLite を使用した UTF8 データの大文字と小文字を区別しない並べ替えに非常に似ています。あなたの場合、おそらく、CultureInfo.CreateSpecificCulture("tr-TR");
の代わりに: を使用する必要がありますCultureInfo.CreateSpecificCulture("ru-RU");
。
何かのようなもの:
using System.Data.SQLite;
using System.Globalization;
namespace SQLiteUTF8CIComparison {
/// <summary />
/// This function adds case-insensitive sort feature to SQLite engine
/// To initialize, use SQLiteFunction.RegisterFunction()
/// before all connections are open
/// </summary />
[SQLiteFunction(FuncType = FunctionType.Collation, Name = "UTF8CI")]
public class SQLiteCaseInsensitiveCollation : SQLiteFunction {
/// <summary />
/// CultureInfo for comparing strings in case insensitive manner
/// </summary />
private static readonly CultureInfo _cultureInfo =
CultureInfo.CreateSpecificCulture("tr-TR");
/// <summary />
/// Does case-insensitive comparison using _cultureInfo
/// </summary />
/// Left string
/// Right string
/// <returns />The result of a comparison</returns />
public override int Compare(string x, string y) {
return string.Compare(x, y, _cultureInfo, CompareOptions.IgnoreCase);
}
}
}
要件が許す場合の簡単な代替手段は、ソートされていないデータを sqlite から取得し、Java でソートすることです。このアプローチの使用は、大量のメモリを消費するため、膨大な数 (数百万) のレコードを選択しない場合にのみ適していることに注意してください。