1. 程式人生 > >檢視SQLserver編碼格式的SQL語句 及 Sqlserver排序規則

檢視SQLserver編碼格式的SQL語句 及 Sqlserver排序規則

SELECT  COLLATIONPROPERTY('Chinese_PRC_Stroke_CI_AI_KS_WS', 'CodePage')
下面是查詢結果:
936 簡體中文GBK
950 繁體中文BIG5
437 美國/加拿大英語
932 日文
949 韓文
866 俄文
65001 unicode UFT-8

 在安裝SQL SERVER 2008的時候,因為我們選擇的都是預設安裝,所以在建立資料庫的時候,伺服器預設選擇的排序規則是一個SQL_Latin1_General_CP1_CI_AS排序規則,這樣在向資料表中插入文字時候,將無法正常顯示,全部以“?”代替。

 那麼,在我們建立資料庫的時候,我們就需要手工指定一個排序規則,可以選擇Chinese_PRC_CI_AS排序規則,如下圖所示


檢視SQLserver編碼格式的SQL語句 - 鵬浩 - 鵬浩的部落格

排序規則:

在SQLSEVER2005中使用的排序規則是SQL_Latin1_General_CP1_CI_AS,而不是可以正確顯示簡體漢字的三種排序規則:

  Chinese_PRC_BIN,

  Chinese_PRC_CI_AS,

  Chinese_PRC_CS_AS。

  看看MS對排序規則的解釋:排序規則控制 SQL Server 2005 中的字串物理儲存。排序規則指定表示每個字元的位模式以及儲存和比較字元使用的規則。

  也就是說,在SQLSERVER中,排序規則實際上就是字元編碼。

  在查詢分析器內執行下面語句,可以得到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區分 

  區分大小寫:如果想讓比較將大寫字母和小寫字母視為不等,請選擇該選項。

  區分重音:如果想讓比較將重音和非重音字母視為不等,請選擇該選項。如果選擇該選項,比較還將重音不同的字母視為不等。

  區分假名:如果想讓比較將片假名和平假名日語音節視為不等,請選擇該選項。

  區分寬度:如果想讓比較將半形字元和全形字元視為不等,請選擇該選項.

  理解了SQLSERVER中的排序規則後,對於上述問題,可以得出以下結論:

  一:修改SQLSERVER使用者資料庫為支援中文字符集的排序規則。

  二:對於存在漢字顯示??,同時又不想更改資料庫上的排序規則,又想要正確顯示出漢字的話,建議在設計時全部使用Unicode型別欄位,也就是那些以N開頭的欄位型別,比如nChar,nVarchar,才可以正確顯示漢字。

  三:如果不想更改排序規則,又不想更改欄位型別,那麼就要更改SQL語句,對於所有的漢字,前面也要加上N才可以正確顯示。具體的方法請參考下面兩條語句:

  查詢:select * from tb_Cust where FirstName=N'汪'

  插入:insert tb_Cust(FirstName,LastName,Sex) values(N'汪',N'鑫昊',N'男')

  注:對於SQLSERVER2000以後,修改伺服器級別的排序規則會比較麻煩,需要重建Master資料庫,為安全以見,不建議直接修改伺服器級別的排序規則!

當前,對於已經建立的資料庫,我們在該資料庫的屬性視窗中的選項頁面中,也可以更改排序規則,這樣向資料表中插入文字時候,就不會出現錯誤資訊了!