2010-07-24 32 views
12

我瞭解字符集,但我不明白整理。我知道你在Mysql或任何RDBMS中的每個字符集都會得到一個默認排序規則,但我仍然沒有得到它!有人能請外行解釋嗎?我不明白整理? (Mysql,RDBMS,字符集)

預先感謝您;-)

+0

你怎麼想整理意味着什麼? – msw 2010-07-24 11:30:53

回答

47

數據庫整理的要點是確定如何對數據進行排序和比較。字符串比較的

區分大小寫

SELECT "New York" = "NEW YORK";` 

可以爲不區分大小寫的核對返回true;假如是區分大小寫的。

可以通過排序規則名稱中的_ci_cs後綴告知哪種歸類。 _bin排序規則做二進制比較(字符串必須100%相同)。變音符號的

比較/重音字符

覈對還確定重音字符是否是如在字符串比較其拉丁基對應物進行處理。

SELECT "Düsseldorf" = "Dusseldorf"; 
SELECT "Èclair" =  "Eclair"; 

將在前一種情況下返回true;後者是錯誤的。您需要閱讀每個排序規則的描述以確定哪個是哪個。

字符串排序

排序規則影響的字符串進行排序的方式。

例如,

  • 元音變音Ä Ö Ü是在芬蘭/瑞典字母在字母表的端latin1_swedish_ci

  • 它們在德國DIN-1分選(latin_german1_ci

    視爲A O U
  • AE OE UE採用德國DIN-2分類(latin_german2_ci)。 (「電話簿」排序)

  • latin1_spanish_ci中,「ñ」(正冪)是「n」和「o」之間的單獨字母。

當使用非拉丁字符時,這些規則將導致不同的排序順序。

在運行時

使用排序規則你必須選擇你的表和列的排序規則,但如果你不介意的性能損失,則可以使用在運行時強制數據庫操作成一定的整理COLLATE關鍵字。

這將採用德國DIN-2排序規則排序的nametable

SELECT name 
FROM table 
ORDER BY name COLLATE latin1_german2_ci; 

在運行時使用COLLATE會有性能問題,因爲每個列具有在查詢期間被轉換。所以在應用這個大數據集之前,請三思。

MySQL參考:

+2

+1,該死的很好解釋複雜的主題 – 2010-07-24 12:07:00

+0

+1。 – TomTom 2010-07-24 12:38:32

+0

也在這裏。當人們花時間以真正有用的方式解釋事情時,這是非常棒的。好工作,先生。 – cbmeeks 2012-11-15 13:28:31

4

整理是關於字符串應該如何排序和比較信息。

它包含例如案例感應度,例如,是否a = A,特殊字符注意事項,例如是否a = á,以及字符順序,例如是否O < Ö