sqlite 中文排序
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 ,这样才能让数据库快起来。
转载于:http://blog.csdn.net/ch_fb/article/details/6682791
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!