加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

SQLite 中文排序(C# 版)

发布时间:2020-12-12 20:42:25 所属栏目:百科 来源:网络整理
导读:SQLite 默认排序为 UNICODE 编码序,与汉语拼音没有任何联系,而人们常习惯拼音序。 解决方法在 C# 中其实很简单,但网上尚未见有任何中文资料说这事,只有 C 方法。以下我是通过一英文网页学到的。 首先,定义和注入规则 示例代码如下,很简单无须多解释。只
SQLite 默认排序为 UNICODE 编码序,与汉语拼音没有任何联系,而人们常习惯拼音序。
解决方法在 C# 中其实很简单,但网上尚未见有任何中文资料说这事,只有 C 方法。以下我是通过一英文网页学到的。

首先,定义和注入规则
示例代码如下,很简单无须多解释。只有一点必须注意,对同一个函数只能注入一次,不得重复,所以注入语句写在主函数中再合适不过。
    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 ,这样才能让数据库快起来。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读