我們在create table時經常會碰到這樣的語句,例如:CorpName nvarchar(10) collate chinese_prc_ci_as null,那它到底是什麼意思呢?
不妨看看下面:
語法
COLLATE < collation_name >
< collation_name > ::=
{ Windows_collation_name } | { SQL_collation_name }
參數
collation_name
是應用於表達式、列定義或數據庫定義的排序規則的名稱。collation_name 可以只是指定的 Windows_collation_name 或 SQL_collation_name。
Windows_collation_name
是 Windows 排序規則的排序規則名稱。
SQL_collation_name
是 SQL 排序規則的排序規則名稱。
註釋
COLLATE 子句可以在幾個級別上指定,包括以下級別:
- 創建或更改數據庫。
可以使用 CREATE DATABASE 或 ALTER DATABASE 語句的 COLLATE 子句指定數據庫的默認排序規則。還可在創建數據庫時使用 SQL Server 企業管理器指定排序規則。如果不指定排序規則,則將爲數據庫指派 SQL Server 實例的默認排序規則。
- 創建或更改表列。
可以使用 CREATE TABLE 或 ALTER TABLE 語句的 COLLATE 子句指定每個字符串列的排序規則。還可在創建表時使用 SQL Server 企業管理器指定排序規則。如果不指定排序規則,將爲列指派數據庫的默認排序規則。
還可使用 COLLATE 子句中的 database_default 選項,指定臨時表中的列使用連接的當前用戶數據庫(而不是 tempdb)的默認排序規則。
- 投影表達式的排序規則。
可以使用 COLLATE 子句將字符表達式投影到特定的排序規則。將爲字符字面值和變量指派當前數據庫的默認排序規則。將爲列引用指派列的定義排序規則。
標 識符的排序規則取決於定義標識符時所在的級別。爲實例級對象(如登錄名和數據庫名)的標識符指派實例的默認排序規則。爲數據庫對象(如表、視圖和列名)的 標識符指派數據庫的默認排序規則。例如,對於名稱差別僅在於大小寫的兩個表,可在使用區分大小寫排序規則的數據庫中創建,而不能在使用不區分大小寫排序規 則的數據庫中創建。
當連接上下文與數據庫相關時,可以創建變量、GOTO 標籤、臨時存儲過程和臨時表,且當已將上下文切換到其它數據庫時引用它們。變量、GOTO 標籤、臨時存儲過程和臨時表的標識符在實例的默認排序規則中。
COLLATE 子句只能應用於 char、varchar、text、nchar、nvarchar 和 ntext 數據類型。
下面簡單介紹一下排序規則:
什麼叫排序規則呢?MS是這樣描述的:"在 Microsoft SQL Server 2000 中,字符串的物理存儲由排序規則控制。排序規則指定表示每個字符的位模式以及存儲和比較字符所使用的規則。"
排序規則一般由排序規則名標識。例外情況是:在安裝過程中沒有爲 Windows 排序規則指定排序規則名稱,而是指定排序規則指示器,然後選擇複選框以指定區分或不區分大小寫和重音的二進制排序或字典排序。
可以執行系統函數 fn_helpcollations 以檢索 Windows 排序規則和 SQL 排序規則的所有有效排序規則名稱的列表:
SELECT * FROM ::fn_helpcollations()
SQL Server 只支持由基礎操作系統支持的代碼頁。當執行依賴排序規則的操作時,被引用對象所使用的 SQL Server 排序規則必須使用計算機上運行的操作系統所支持的代碼頁。這些操作可包括:
· 當創建或更改數據庫時,爲數據庫指定默認排序規則。
· 當創建或更改表時,爲列指定默認排序規則。
· 當還原或附加數據庫時,操作系統必須支持數據庫的默認排序規則,並支持數據庫中的任何 char、varchar 和 text 列或參數的排序規則。
支持 char 和 varchar 數據類型的代碼頁轉換,但是不支持 text 數據類型的代碼頁轉換。不報告代碼頁轉換過程中的數據丟失。
如果被引用的對象所使用或指定的排序規則使用 Windows® 不支持的代碼頁,則 SQL Server 將發出錯誤信息。有關更多信息,請參見 SQL Server 聯機叢書的"SQL Server 構架"章中的"排序規則"節。
排序規則名稱由兩部份構成,前半部份是指本排序規則所支持的字符集。
如: 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區分
區分大小寫:如果想讓比較將大寫字母和小寫字母視爲不等,請選擇該選項。
區分重音:如果想讓比較將重音和非重音字母視爲不等,請選擇該選項。如果選擇該選項,比較還將重音不同的字母視爲不等。
區分假名:如果想讓比較將片假名和平假名日語音節視爲不等,請選擇該選項。