博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sqlite 中文排序
阅读量:5875 次
发布时间:2019-06-19

本文共 1026 字,大约阅读时间需要 3 分钟。

SQLite 默认排序为 UNICODE 编码序,与汉语拼音没有任何联系,而人们常习惯拼音序。

解决方法在 C# 中其实很简单,但网上尚未见有任何中文资料说这事,只有 C 方法。以下我是通过一英文网页学到的。
首先,定义和注入规则
示例代码如下,很简单无须多解释。只有一点必须注意,对同一个函数只能注入一次,不得重复,所以注入语句写在主函数中再合适不过。

[csharp] 
  1.     static class Program {  
  2.   
  3.         // 主函数  
  4.         [STAThread]  
  5.         static void Main()  
  6.         {  
  7.             SQLiteFunction.RegisterFunction(typeof(SQLiteCollation_PinYin));    // 注入  
  8.             Config.Reload();  
  9.             Application.EnableVisualStyles();  
  10.             Application.SetCompatibleTextRenderingDefault(false);  
  11.             Application.Run(new MainForm());  
  12.             Config.Save();  
  13.         }  
  14.   
  15.         // 中文拼音排序规则  
  16.         [SQLiteFunction(FuncType = FunctionType.Collation, Name = "PinYin")]  
  17.         class SQLiteCollation_PinYin: SQLiteFunction {  
  18.             public override int Compare(string x, string y)  
  19.             {  
  20.                 return string.Compare(x, y);  
  21.             }  
  22.         }  
  23.     }  

而后,使用
使用时, SQL 代码不能简单地写上 ORDER BY XXX 了事,还得用上 COLLATE ,示例如下:

[sql] 
  1. SELECT * FROM Client_V  
  2. ORDER BY  
  3.     City COLLATE PinYin,  
  4.     Unit COLLATE PinYin,  
  5.     Name COLLATE PinYin;  

COLLATE 便是指定规则, PinYin 便是上面 C# 代码中定义规则时的 Name = "PinYin" 。

另外,用建表、建立索引时,也应当考虑使用 COLLATE ,这样才能让数据库快起来。
转载于:

转载于:https://www.cnblogs.com/08shiyan/archive/2012/05/11/2496491.html

你可能感兴趣的文章
虚拟机Centos7连接Internet
查看>>
ansible 基本操作(初试)
查看>>
更改tomcat的根目录路径
查看>>
51nod 1292 字符串中的最大值V2(后缀自动机)
查看>>
加快ALTER TABLE 操作速度
查看>>
学习笔记之软考数据库系统工程师教程(第一版)
查看>>
基本网络概念
查看>>
将 ASP.NET Core 2.0 项目升级至 ASP.NET Core 2.1 RC 1
查看>>
js提交图片转换为base64
查看>>
学习CodeIgniter框架之旅(二)继承自定义类
查看>>
Y2161 Hibernate第三次考试 2016年8月18日 试卷分析
查看>>
Angular CLI 使用教程指南参考
查看>>
PHP 程序员的技术成长规划
查看>>
用于守护进程的出错处理函数
查看>>
AppCan可以视为Rexsee的存活版
查看>>
【转】SQL SERVER 2005 数据库状态为“可疑”的解决方法
查看>>
事件、委托、委托方法的总结(使用EventHandler<>)
查看>>
Revit API 创建带箭头的标注
查看>>
jetty启动报错Unsupported major.minor version 51.0
查看>>
Xamarin.Android开发实践(七)
查看>>