SQLite 中文排序(C# 版)

前端之家收集整理的这篇文章主要介绍了SQLite 中文排序(C# 版)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
sqlite 默认排序为 UNICODE 编码序,与汉语拼音没有任何联系,而人们常习惯拼音序。
解决方法在 C# 中其实很简单,但网上尚未见有任何中文资料说这事,只有 C 方法。以下我是通过一英文网页学到的。

首先,定义和注入规则
示例代码如下,很简单无须多解释。只有一点必须注意,对同一个函数只能注入一次,不得重复,所以注入语句写在主函数中再合适不过。
@H_502_7@ static class Program { // 主函数 [STAThread] static void Main() { sqliteFunction.RegisterFunction(typeof(sqliteCollation_PinYin)); // 注入 Config.Reload(); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new MainForm()); Config.Save(); } // 中文拼音比较规则 [sqliteFunction(FuncType = FunctionType.Collation,Name = "PinYin")] class sqliteCollation_PinYin: sqliteFunction { public override int Compare(string x,string y) { return string.Compare(x,y); } } }
而后,使用
使用时, sql 代码不能简单地写上 ORDER BY XXX 了事,还得用上 COLLATE ,示例如下:
SELECT * FROM Client_V
ORDER BY
    City COLLATE PinYin,Unit COLLATE PinYin,Name COLLATE PinYin;
COLLATE 便是指定规则, PinYin 便是上面 C# 代码中定义规则时的 Name = "PinYin" 。 另外,用建表、建立索引时,也应当考虑使用 COLLATE ,这样才能让数据库快起来。

猜你在找的Sqlite相关文章