今天查詢sqlite的時候需要不區分大小寫,查了下文檔,需要使用collate nocase.順便學習下collate的用法。
collate在sql中是用來定義排序規則的。排序規則其實就是當比較兩個字符串時,根據某種規則來確定哪個比較大,是否相等。各個數據庫支持不同的排序規則。
sqlite有三種build in的排序規則:
BINARY | 二進制比較,直接使用memcmp()比較 |
NOCASE | 將26個大寫字母轉換為小寫字母后進行與BINARY一樣的比較 |
RTRIM | 和BINARY一樣,忽略結尾的空格 |
Sql server則比較復雜: 根據MSDN官方解釋 排序規則指定了表示每個字符的位模式。它還指定了用於排序和比較字符的規則。
排序規則具有下面的特征: 區分語言,區分大小寫,區分重音,區分假名
看一下SqlServer中的截圖:
collate的名字包括兩部分,前部分是表示字符集,后部分定義如下:
_BIN | 指定使用向后兼容的二進制排序順序。 |
_BIN2 | 指定使用 SQL Server 2005 中引入的碼位比較語義的二進制排序順序。 |
_Stroke | 按筆划排序 |
_CI(CS) | 是否區分大小寫,CI不區分,CS區分 |
_AI(AS) | 是否區分重音,AI不區分,AS區分 |
_KI(KS) | 是否區分假名類型,KI不區分,KS區分 |
_WI(WS) | 是否區分全半角,WI不區分,WS區分 |
還可以根據拼音,筆畫來排序。
如何設置排序規則
可以在數據庫(create database/alter database時指定),字段級別(create table/alter table時指定)使用Collate命令設置collate,字段級別優先級更高。