MSSQL 區分大小寫 探究

近日項目中需要從遠程服務端下載數據,但是數據有個特點是區分大小寫的,所以和我們項目本身上存在衝突,因此做了個實例來研究一下mssql的大小寫問題。

創建表並查看加入數據的情況

 

--1·情況:不區分大小寫的情況

if exists (select 1 from sysobjects where name='qufen' and type='U')

drop table qufen

go

--創建表 並添加主鍵

CREATE TABLE qufen(

[daxiaoxie] [nchar](10) COLLATE Chinese_PRC_CI_AS NOT NULL

 CONSTRAINT [PK_qufen] PRIMARY KEY CLUSTERED 

(

[daxiaoxie] ASC

)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]

) ON [PRIMARY]

--刪除表內數據

delete from  qufen

--加入測試用的數據

insert into qufen values('a');

insert into qufen values('A');

 

結果爲

-----------------------------------------------------------------------------------

 

(0 行受影響)

 

(1 行受影響)

消息 2627,級別 14,狀態 1,第 13 行

違反了 PRIMARY KEY 約束 'PK_qufen'。不能在對象 'dbo.qufen' 中插入重複鍵。

語句已終止。

--2·情況:區分大小寫的情況
if exists (select 1 from sysobjects where name='qufen' and type='U')
drop table qufen
go
--創建表 並添加主鍵
CREATE TABLE qufen(
[daxiaoxie] [nchar](10) COLLATE Chinese_PRC_CS_AS NOT NULL
 CONSTRAINT [PK_qufen] PRIMARY KEY CLUSTERED 
(
[daxiaoxie] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
--刪除表內數據
delete from  qufen
--加入測試用的數據
insert into qufen values('a');
insert into qufen values('A');
---------------------------------------------------------
(0 行受影響)
(1 行受影響)
(1 行受影響)
PS:問題的關鍵就是在COLLATE 的設置上。
SQL_collation_name 是 SQL 排序規則的排序規則名稱,在 Microsoft SQL Server 2000 中,字符串的物理存儲由排序規則控制。排序規則指定表示每個字符的位模式以及存儲和比較字符所使用的規則。
       在查詢分析器內執行下面語句,可以得到SQL SERVER支持的所有排序規則。 
    select * from ::fn_helpcollations() 
    排序規則名稱由兩部份構成,前半部份是指本排序規則所支持的字符集。
如: 
  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區分  
區分大小寫:如果想讓比較將大寫字母和小寫字母視爲不等,請選擇該選項。 
區分重音:如果想讓比較將重音和非重音字母視爲不等,請選擇該選項。如果選擇該選項,比較還將重音不同的字母視爲不等。 
區分假名:如果想讓比較將片假名和平假名日語音節視爲不等,請選擇該選項。 
區分寬度:如果想讓比較將半角字符和全角字符視爲不等,請選擇該選項

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章