什么是排序規(guī)則(collation)
關(guān)于SQL Server的排序規(guī)則,估計(jì)大家都不陌生,在創(chuàng)建數(shù)據(jù)庫(kù)時(shí)我們經(jīng)常要選擇一種排序規(guī)則(conllation),一般我們會(huì)留意到每一種語(yǔ)言的排序規(guī)則都有許多種,比如標(biāo)準(zhǔn)大陸簡(jiǎn)體中文Chinese_PRC的排序規(guī)則就有數(shù)十種之多。
這些排序規(guī)則有什么作用呢?讓我們先來(lái)看看MS官方的解釋:
排序規(guī)則指定了表示每個(gè)字符的位模式。它還指定了用于排序和比較字符的規(guī)則。排序規(guī)則具有下面的特征:
語(yǔ)言
區(qū)分大小寫
區(qū)分重音
區(qū)分假名
比如在SQL Server 2005中,排序規(guī)則名稱由兩部份構(gòu)成,比如 Chinese_PRC_CI_AI_WS
前半部份是指本排序規(guī)則所支持的字符集,如Chinese_PRC 指針對(duì)大陸簡(jiǎn)體字UNICODE的排序規(guī)則。
后半部份即后綴的含義如下:
_BIN | 指定使用向后兼容的二進(jìn)制排序順序。 |
_BIN2 | 指定使用 SQL Server 2005 中引入的碼位比較語(yǔ)義的二進(jìn)制排序順序。 |
_Stroke | 按筆劃排序 |
_CI(CS) | 是否區(qū)分大小寫,CI不區(qū)分,CS區(qū)分 |
_AI(AS) | 是否區(qū)分重音,AI不區(qū)分,AS區(qū)分 |
_KI(KS) | 是否區(qū)分假名類型,KI不區(qū)分,KS區(qū)分 |
_WI(WS) | 是否區(qū)分全半角,WI不區(qū)分,WS區(qū)分 |
既然排序規(guī)則如此復(fù)雜,那么應(yīng)用了不同排序規(guī)則的列之間默認(rèn)情況下便不能進(jìn)行Union、Join、Like等equal操作了,于是便有了排序規(guī)則(collation)沖突。
排序規(guī)則(collation)沖突。
我們知道,SQL Server 從2000 開(kāi)始,便支持多個(gè)排序規(guī)則。SQL Server 2000 的數(shù)據(jù)庫(kù)可使用除默認(rèn)排序規(guī)則以外的其他排序規(guī)則。此外,SQL Server 2000 還支持為列專門制定排序規(guī)則。
這樣一來(lái),我們?cè)趯懣绫怼⒖鐢?shù)據(jù)庫(kù)、跨服務(wù)器操作的T-SQL時(shí),如果equal的字段排序規(guī)則不同,便會(huì)發(fā)生排序規(guī)則沖突。
比如我們先見(jiàn)兩個(gè)結(jié)構(gòu)相同的表,但字段的排序規(guī)則不同:
當(dāng)表建好之后執(zhí)行:
便會(huì)出下類似下面的問(wèn)題:
無(wú)法解決 equal to 操作中 "Chinese_PRC_BIN" 和 "Chinese_PRC_CI_AS" 之間的排序規(guī)則沖突。
生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
![]()