針對解決sql server資料庫中不區分大小寫問題

來源:互聯網
上載者:User

在網路上搜尋相關的很多資料,總結了一下,發生這種情況的原因主要是由於定序引起的:
不指定定序的話  
   
  暫存資料表是否區分大小寫,與tempdb資料庫的排序有關.  
  資料庫物件是否區分大小寫,與資料庫本身的定序有關.  
  變數是否區分大小寫,與資料庫本身的定序有關,估計也是與tempdb資料庫有關吧.
  二進位編碼:根據針對每個字元定義的位元模式來排序與比較Microsoft®SQL Server資料表中的資料。 Binary排序方式區分大小寫,亦即小寫比大寫優先,且區分腔調字。這是最快的排序方式。
若未選取此選項,SQL   Server將遵循關聯之語言或字母的字典內定義的排序與比較規則。   
    
  區分大小寫指定SQL Server區分大寫與小寫字母。若未選取此選項,SQL   Server會將大寫與小寫字母視為相等。若您沒有選取[區分大小寫],SQL   Server並不會定義小寫字母與大寫字母的排序方式何者較高.

解決方案:
方法一.安裝SQL時選擇區分大小寫或安裝完以後重建mastar,選擇區分大小  
  C:\Program   Files\Microsoft   SQL   Server\80\Tools\Binn\rebuildm.exe   
    
方法二.sql server 8.0以上的版本才可以,7.0及其以下不支援  
  alter database 資料庫 COLLATE  Chinese_PRC_CS_AS  
  修改定序,改成大小寫敏感的定序  
  如果只修改一個表,用alter table語句    
  如果修改一個庫的預設定序,用alter datebase語句    
  如果修改整個伺服器的預設定序,用Rebuildm.exe重建master庫 
 

 --指定定序就可以了   
    
  --樣本     
  select   replace('AbacB'   collate   Chinese_PRC_CS_AS_WS,'B','test')     
    
  --如果你是要求表支援,則可以建表時指定定序,這樣replace就不用寫定序了     
    
  --樣本     
  create   table   tb(a   varchar(20)   collate   Chinese_PRC_CS_AS_WS)     
  insert   tb   values('Abac')     
    
  select   replace(a,'a','test')   from   tb   
    
  drop   table   tb   

  
小結一下:

--表
ALTER   TABLE   tb   
    ALTER   COLUMN   colname   nvarchar(100)   COLLATE   Chinese_PRC_CI_AS     
  --不區分大小寫   
  ALTER   TABLE   tb     
    ALTER   COLUMN   colname   nvarchar(100)   COLLATE   Chinese_PRC_CS_AS     
  --區分大小寫   
  資料庫   
  ALTER   DATABASE   database     
  COLLATE   Chinese_PRC_CS_AS     
  --區分大小寫   
    
  ALTER   DATABASE   database     
    COLLATE   Chinese_PRC_CI_AS     
  --不區分大小寫   

指定定序即可 
  Windows   定序名稱    
  在COLLATE子句中指定Windows定序名稱。Windows定序名稱由定序指標和比較風格構成。     
  文法:    
  <Windows_collation_name>  ::   =     
         CollationDesignator_<ComparisonStyle>   
             <ComparisonStyle>   ::=    
                  CaseSensitivity_AccentSensitivity    
                  [_KanatypeSensitive   [_WidthSensitive   ]   ]    
                  |   _BIN    
   
  參數    
  CollationDesignator     
   指定Windows 定序使用的基本定序。基本定序包括:     
   
  當指定按字典排序時應用其定序的字母表或語言  
   
   
  用於儲存非   Unicode   字元資料的字碼頁。    
  例如   Latin1_General   或法文,兩者都使用字碼頁   1252,或土耳其文,它使用字碼頁   1254。    
   
  CaseSensitivity  
   
  CI   指定不區分大小寫,CS   指定區分大小寫。  
   
  AccentSensitivity  
   
  AI   指定不區分重音,AS   指定區分重音。  
   
  KanatypeSensitive  
   
  Omitted   指定不區分大小寫,KS   指定區分假名類型。  
   
  WidthSensitivity  
   
  Omitted   指定不區分大小寫,WS   指定區分大小寫。  
   
  BIN  
   
  指定使用二進位排序次序。     
     
    
  如果你只是目前查詢區分,那麼還是不要這樣改,免得又反悔,如此查詢:  
  select   *   from   a    
  /*  
  a_nam             a_add              
  ----------   ----------    
  1                     aa  
  1                     bb  
  2                     cc  
  2                     vv  
  2                     kk  
  3                     dd  
  3                     ee  
  4                     dd  
  5                     ee  
  6                     yy  
  6                     yy  
   
  (11   row(s)   affected)  
  */  
  現在我們查詢a_add   =   'aa'的,'Aa'等等不行!  
  Example   1:  
   
  select   *   from   a    
  where   a_add   collate   Chinese_PRC_CS_AS_WS   =   'aa'    
  /*  
  a_nam             a_add              
  ----------   ----------    
  1                     aa  
   
  (1   row(s)   affected)  
  */  
   
  Example   2:  
   
  select   *   from   a    
  where   a_add   collate   Chinese_PRC_CS_AS_WS   =   'Aa'    
  /*  
  a_nam             a_add              
  ----------   ----------    
   
  (0   row(s)   affected)  
  */  
   
  方法三.上面的記不住,那麼就用最笨的方法,轉化為ascii  
  select   *   from   a  
  where    
  ascii(substring(a_add,1,1))   =   ascii(substring('Aa',1,1))  
  and    
  ascii(substring(a_add,2,1))   =   ascii(substring('Aa',2,1))  
  /*  
  a_nam             a_add              
  ----------   ----------    
   
  (0   row(s)   affected)  
  */  
   
  方法三:任何版本都可以  
  

select   *   from   a     
  where   cast(a_add   as   varbinary(10))=   cast('aa'   as   varbinary(10))   

   

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.