回答
從MySQL docs:
甲字符集是一組符號和 編碼的。 A 排序規則是一組 規則,用於比較 字符集中的字符。讓我們用 一個虛構的字符集來區分 。
假設我們有一個字母表 四個字母:'A','B','a','b'。我們 給每個字母一個數字:'A'= 0, 'B'= 1,'a'= 2,'b'= 3。字母 'A'是一個符號,數字0是 編碼'A',並且所有四個字母及其 編碼的組合 是字符集。
現在,假設我們想比較 兩個字符串值'A'和'B'。執行此操作的最簡單方法是查看 的編碼:0代表'A',1代表 'B'。因爲0小於1,所以我們說 'A'小於'B'。現在,我們剛剛完成的 是對我們的 字符集應用排序規則。排序規則爲規則集 (本例中只有一條規則): 「比較編碼」。我們把這個簡稱爲 二進制整理。
但是,如果我們想說 小寫字母和大寫字母是 相當於什麼呢?然後我們至少在 有兩條規則:(1)將 小寫字母'a'和'b'看作 等同於'A'和'B'; (2)然後 比較編碼。我們稱之爲 不區分大小寫的整理。這是一個 比二進制 排序規則稍微複雜一點。
在現實生活中,大多數字符集有 許多字符:不僅僅是「A」和「B」 但整個字母,有時 多個字母或東部書寫 系統有成千上萬個字符, 有很多特殊符號一起和 標點符號。此外,在現實生活中, 最歸類有很多的規則:不 只是不區分大小寫,而且 口音不敏感(即「口音」,是連接到一個字符 的符號, 德國「O」)和多字符 映射(例如兩個德語 排序中的一箇中的'ö'= 'OE'的規則)。
A character encoding是一種對字符進行編碼以使其適合內存的方法。也就是說,如果字符集是ISO-8859-15,歐元符號€將被編碼爲0xa4,在UTF-8中,它將是0xe282ac。
的collation是如何比較字符,在latin9,有字母e é è ê f
,如果排序由二進制表示,它會去e f é ê è
但是當覈對設定,例如,法語,你就會有他們在你以爲他們會的順序,這是所有的e é è ê
是相等的,然後f
。
字符集是所有書寫字形的子集。字符編碼指定這些字符如何映射到數字值。某些字符編碼(如UTF-8和UTF-16)可以對通用字符集中的任何字符進行編碼。其他的,如US-ASCII或ISO-8859-1只能編碼一個小的子集,因爲它們分別使用7位和8位。由於許多標準都指定了字符集和字符編碼,因此術語「字符集」通常可以自由替換爲「字符編碼」。
排序規則包含指定如何比較字符以進行排序的規則。排序規則可以是特定於語言環境的:兩種字符的順序因語言而異。
選擇字符集和排序規則歸結爲您的應用程序是否國際化。如果不是,你的目標是什麼區域?
爲了選擇你想支持的字符集,你必須考慮你的應用程序。如果您正在存儲用戶提供的輸入,則可能很難預見您的軟件最終將使用的所有語言環境。爲了支持他們,最好從一開始就支持UCS(Unicode)。但是,這是一個成本;許多西歐字符現在需要每個字符兩個字節而不是一個字節。
如果您的數據庫使用排序規則來創建索引,並且稍後使用該索引來提供排序結果,那麼選擇正確的排序規則可以提高性能。但是,由於排序規則通常是特定於語言環境的,因此如果您需要根據另一個語言環境的規則對結果進行排序,那麼該索引將毫無價值。
我建議使用utf8mb4_unicode_ci
,它基於用於排序和比較的Unicode標準,該標準可以在各種語言中進行精確排序。
:「我要求解釋這兩者以及如何選擇它們」 – 2017-03-15 16:35:03
- 1. 脫字符(^)字符是什麼意思?
- 2. 是什麼意思:是什麼意思?
- 3. 符號「⊇」是什麼意思?
- 4. &符號是什麼意思?
- 5. 這個字符串是什麼意思?
- 6. 這些字符是什麼意思?
- 7. {}中的字符串是什麼意思?
- 8. makefile符號$ @和$ <是什麼意思?
- 9. Clojure:`和〜@是什麼意思?
- 10. `^^^`和`〜>`是什麼意思?
- 11. 什麼是目錄名'。'和'..'是什麼意思,faDirectory是什麼意思?
- 12. 什麼是「字符串與詮釋」應該是什麼意思?
- 13. 是什麼管道/ veritcal條字符TSQL是什麼意思?
- 14. 字符串... <varname>什麼是字符串...意思是
- 15. 什麼|和「是什麼意思?
- 16. 這個整數是什麼意思?
- 17. 「?」是什麼意思?
- 18. $$ $$是什麼意思?
- 19. 什麼是「||」意思?
- 20. 「\\。\」,「\ ?? \」,「\\?\」,「\\」是什麼意思?
- 21. 「=」是什麼意思
- 22. &**是什麼意思?
- 23. 是什麼意思?
- 24. 「_」是什麼意思?
- 25. 什麼是:!:意思?
- 26. || =是什麼意思?
- 27. %%是什麼意思?
- 28. =是什麼意思?
- 29. %{}是什麼意思?
- 30. + =是什麼意思?
重要的是要注意,對於單個字符集可能有許多不同的排序規則。一個是「正確的」取決於文本的語義,通常由它所寫的語言決定。來自OP的 – Phil 2015-10-21 12:50:18