我正在使用sqlite。除了排序,我没有任何问题。当我使用“order by”子句查询表时,我无法根据 iso8859-9 字符集获得正确的排序。我的编码的特殊字符显示在列表的末尾。它像是:
- asdf
- bnm
- cgfj
- dfgh
- çdfg
但我想要的是:
- asdf
- bnm
- cgfj
- çdfg
- dfgh
我能做些什么来克服这个问题?
提前致谢。
使用:
窗户,网豆,java,sqlite
你可以定义一个新的排序序列,如果你想解决从 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 中排序。请注意,仅当您不选择大量(数百万)条记录时才适合使用此方法,因为它会消耗大量内存。