2010-02-22 102 views
8

這本書我讀說SQL Server排序規則

SQL Server支持兩種類型的字符數據類型的正規和Unicode的。常規數據類型包括CHAR和VARCHAR,Unicode數據類型包括NCHAR和NVARCHAR。區別在於普通字符對每個字符使用一個字節的存儲空間,而Unicode字符則需要每個字符兩個字節。由於每個字符只有一個字節的存儲空間,因此對於列的常規字符類型的選擇,除英文以外,您只能使用一種語言,因爲只有256(2^8)個不同的字符可以由單個字節表示。

我通過這個得知的是,如果我使用Varchar,那麼我只能使用一種語言(例如印地語,如印度語)以及英語。
但是當我運行這個

Create Table NameTable 
(
    NameColumn varchar(MAX) COLLATE Indic_General_90_CI_AS_KS 
) 

它顯示了我的錯誤「歸類‘Indic_General_90_CI_AS_KS’支持僅Unicode數據類型,並且不能適用於CHAR,VARCHAR或文本數據類型。」

那麼我在哪裏誤解了作者?
感謝

回答

3

你可以找到歸類here的列表,編碼類型


某些排序規則將只適用於1字節編碼沿 - 127位被用於普通的ASCII和128可用於其他字符 - 印地語可能不適合128個字符,因此1字節的排序規則不適用於它。你將不得不使用nvarchar(或其他'n'前綴字符類型)。

- 編輯 -

French_CI_AS作爲一個非英文的例子

的事情之一排序規則允許的語言和區域設置特定的字符排序。所以法語!=拉丁語。

又如Arabic_CI_AS

這是一個1字節的編碼與阿拉伯字母。

+0

你可以命名任何1字節的排序規則,以便我可以測試它嗎? – 2010-02-22 11:20:38

+0

SQL_Latin1_General_CP1_CI_AS – 2010-02-22 11:22:06

+0

我想知道除英語以外的任何其他內容 – 2010-02-22 11:27:06

1

您可以在SQL語句中使用這個

name = N'مرحبا كيف حالك' 
3

使用此,考慮到「內容」中包含要插入阿拉伯語字符串變量:

update Table set contents = convert(text, N'" + content + "' collate Arabic_CI_AS) 

它工作正常。