2

我正在使用sqlite。除了排序,我没有任何问题。当我使用“order by”子句查询表时,我无法根据 iso8859-9 字符集获得正确的排序。我的编码的特殊字符显示在列表的末尾。它像是:

 - asdf
 - bnm
 - cgfj
 - dfgh
 - çdfg

但我想要的是:

 - asdf
 - bnm
 - cgfj
 - çdfg
 - dfgh

我能做些什么来克服这个问题?

提前致谢。

使用:

窗户,网豆,java,sqlite

4

1 回答 1

1

你可以定义一个新的排序序列,如果你想解决从 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 中排序。请注意,仅当您不选择大量(数百万)条记录时才适合使用此方法,因为它会消耗大量内存。

于 2012-11-17T10:32:21.353 回答