SQL Server Collation解惑

tao先生發表於2015-01-23

       某些產品會有固定的DB Collation,如果提前建立DB的時候沒有按照要求指定對應的Collation,這個時候就會報錯,提示你Collation不匹配。在安裝SQL Server的時候有時候需要有區分大小寫的要求,只是在安裝的時候改變Collation成CaseSensitive(區分大小寫),其實至始至終也不明白Collation在SQL Server中的作用到底是什麼。

Collation到底是什麼?

說白了Collation其實就是描述了資料在資料庫中是按照什麼規則來描述字元,以及字元在資料庫中如何排序和比較的,Collation 是由兩部分組成的(前半部是SQL所支援的字符集,後半部分指的是SQL的排序規則),舉個例子:

Chinese_PRC_90_CI_AS_KS ——》由“Chinese_PRC_90”(前半部分支援中國大陸的字符集)和“CI_AS_KS ”(後半部分排序規則)組成。

  • _CI(CS)表示是否區分字母大小寫,CI不區分,CS區分。如果區分大小寫,那麼排序的時候小寫字母的排在大寫的前面;如果不區分大小寫,那麼排序的時候視大小寫字母相同。
  • _AI(AS) 表示是否區分重音,AI不區分,AS區分。如果不區分重音,那麼排序的時候視“a”和“ấ”為相同字元
  • _KI(KS) 表示是否區分假名型別,KI不區分,KS區分。在日語中應用。
  • _WI(WS) 表示是否區分全半形,WI不區分,WS區分。半形是單位元組,全形是雙位元組。

 

SQL Server Collation的級別

  • Server Level Collation: 安裝SQL Server 的時候給Instance指定的Collation規則(比如說我們指定的區分大小寫之類的)
  • Database Level Collation:在建立Database的時候指定的Collation規則
  • Column Level Collation: 給Database表增加行的時候,給行指定的Collation規則
  • Expression Level Collation: 在執行SQL 查詢語句的時候加的Collation規則

 

如何update已建立好的Collation?

對於Server Level Collation的更改(更新有風險,更新需謹慎啊,對Server Collation更新後,之前儲存的資料將會全部丟失)

對於Server Level Collation的更改需要注意幾個地方:

  1. 首先指向到安裝目錄下setup.exe這一層
  2. 如果是Windows認證模式,不需要指定【SAPWD=StrongPassword】
  3. 如果是混合認證模式,使用sa使用者認證,則必須指定【SAPWD=StrongPassword】,否則會報錯

update的程式碼:

Setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=InstanceName 
/SQLSYSADMINACCOUNTS=accounts /[ SAPWD= StrongPassword ] 
/SQLCOLLATION=CollationName

 Sql2                         

驗證Collation是否成功Update:

Sql5

對於Database Level Collation的更改

1. 使用SQL Server Management Studio

sql3

2. 使用SQL語句:

ALTER DATABASE DataBaseName
COLLATE Chinese_PRC_90_CI_AS_KS ;
GO

 

 

————————————————————————————————

WHOOOOSHHHHHHHHHHHH…………

Blimey what was that?

That was your life mate

Oh, I was not quite ready. Can I have another go?

Sorry mate, only one per person.

相關文章