在SQL Server中默認對大小寫是不敏感的,例如userName='jesse'和userName='JESSE'結果是一樣的。在驗證密碼的時候可能就需要對字符串大小寫敏感,需要做一些處理,介紹兩種方法:
法Ⅰ:轉換成二進制再比較,由於大小寫的ASC碼不同。例如:
select *
from T_User
where cast(field as varbinary) = cast( 'Admin' as varbinary)
法Ⅱ:利用排序規則,也是基於二進制。在字段後加上collate Chinese_PRC_CS_AS_WS
如:
select *
from T_User
where userName='admin' AND PASSWORD collate Chinese_PRC_CS_AS_WS ='Admin'
是否區分大小寫與排序規則有關,排序規則中各部分含義如下所示:
舉例分析 Chinese_PRC_CS_AI_WS
前半部份:指UNICODE字符集,Chinese_PRC_指針對大陸簡體字UNICODE的排序規則。
排序規則的後半部份即後綴 含義:
_BIN 二進制排序
_CI(CS) 是否區分大小寫,CI不區分,CS區分
_AI(AS) 是否區分重音,AI不區分,AS區分
_KI(KS) 是否區分假名類型,KI不區分,KS區分
_WI(WS) 是否區分寬度 WI不區分,WS區分
區分大小寫:如果想讓比較將大寫字母和小寫字母視為不等,請選擇該選項。
區分重音:如果想讓比較將重音和非重音字母視為不等,請選擇該選項。如果選擇該選項,比較還將重音不同的字 母視為不等。
區分假名:如果想讓比較將片假名和平假名日語音節視為不等,請選擇該選項。
區分寬度:如果想讓比較將半角字符和全角字符視為不等,請選擇該選項