某些產品會有固定的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的更改需要注意幾個地方:
- 首先指向到安裝目錄下setup.exe這一層
- 如果是Windows認證模式,不需要指定【SAPWD=StrongPassword】
- 如果是混合認證模式,使用sa使用者認證,則必須指定【SAPWD=StrongPassword】,否則會報錯
update的程式碼:
Setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=InstanceName /SQLSYSADMINACCOUNTS=accounts /[ SAPWD= StrongPassword ] /SQLCOLLATION=CollationName
驗證Collation是否成功Update:
對於Database Level Collation的更改
1. 使用SQL Server Management Studio
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.