sqlite 中文排序


SQLite 默認排序為 UNICODE 編碼序,與漢語拼音沒有任何聯系,而人們常習慣拼音序。
解決方法在 C# 中其實很簡單,但網上尚未見有任何中文資料說這事,只有 C 方法。以下我是通過一英文網頁學到的。

首先,定義和注入規則
示例代碼如下,很簡單無須多解釋。只有一點必須注意,對同一個函數只能注入一次,不得重復,所以注入語句寫在主函數中再合適不過。

[csharp]  view plain copy
  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]  view plain copy
  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 ,這樣才能讓數據庫快起來。

轉載於:http://blog.csdn.net/ch_fb/article/details/6682791


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM