SQL Server 排序規(guī)則

初遇這個(gè)名詞,小D內(nèi)心真的是迷茫的,排序規(guī)則單純是升序降序這個(gè)意思嗎?其實(shí),這和Oracle里面的字符集含義是相同的。
SQL Server支持多語(yǔ)言環(huán)境,在SQL Server中,字符集被稱為排序規(guī)則(Collation)。排序規(guī)則不僅影響記錄行的sort順序,還影響中文顯示是否亂碼等。在SQL Server中,排序規(guī)則可在服務(wù)器級(jí)別數(shù)據(jù)庫(kù)級(jí)別以及表列級(jí)別設(shè)置。
在SQL Server軟件安裝時(shí)我們可設(shè)置服務(wù)器級(jí)別的排序規(guī)則,若在創(chuàng)建數(shù)據(jù)庫(kù)時(shí)我們未指定排序規(guī)則,數(shù)據(jù)庫(kù)則會(huì)繼承實(shí)例的排序規(guī)則,而表中的列默認(rèn)是繼承數(shù)據(jù)庫(kù)的排序規(guī)則(除非在創(chuàng)建表時(shí)指定列的排序規(guī)則)。
通過以下命令分別查看不同級(jí)別下的排序規(guī)則:
數(shù)據(jù)庫(kù)級(jí)別:SELECT SERVERPROPERTY(N'Collation')
數(shù)據(jù)庫(kù)級(jí)別:SELECT name, collation_name FROM sys.databases WHERE name = N'mydb';
表列級(jí)別:SELECT name, collation_name FROM sys.columns
由于SQL Server的排序規(guī)則只影響字符型的列,如char, varchar, text, nchar, nvarchar, ntext,因此視圖sys.columns中非字符型的排序規(guī)則顯示為NULL。


小D筆記:

在安裝SQL Server時(shí),你可能困惑應(yīng)該選擇哪種字符集,官方是這么說(shuō)的

推薦使用SQL Server的字符集,而非Windows的字符集。原因在于SQL Server字符集是基于Windows衍生出來(lái)的,同時(shí)保證了SQL Server版本間的兼容性。

綜上述,我們應(yīng)盡可能的正確設(shè)置SQL Server排序規(guī)則:

  • 1 正確的設(shè)置SQL Server排序規(guī)則 ,推薦使用Chinese_PRC_CI_AS排序規(guī)則。
  • 2 盡可能多使用nvarchar等Unicode類型,而非varchar類型。

由此只需保持SQL Server中服務(wù)器、數(shù)據(jù)庫(kù)、表列三個(gè)級(jí)別的排序規(guī)則設(shè)置一致即是正確的使用方式。


科普貼

排序規(guī)則名稱由兩部份構(gòu)成,前半部份是指本排序規(guī)則所支持的字符集。
如:
  Chinese_PRC_CI_AI_WS
前半部份:指UNICODE字符集,Chinese_PRC_指針對(duì)大陸簡(jiǎn)體字UNICODE的排序規(guī)則,按拼音排序;Chinese_PRC_Stroke 表示按漢字筆畫排序。
排序規(guī)則的后半部份即后綴。常用含義有:

  • _BIN 二進(jìn)制排序
  • _CI(CS) 是否區(qū)分大小寫,CI不區(qū)分,CS區(qū)分(case-insensitive/case-sensitive)
  • _AI(AS) 是否區(qū)分重音,AI不區(qū)分,AS區(qū)分(accent-insensitive/accent-sensitive)
  • _WI(WS) 是否區(qū)分寬度,WI不區(qū)分,WS區(qū)分(width-insensitive/width-sensitive)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容