一捧毛、字符集(Character set)
字符集是多個(gè)字符(英文字符,漢字字符让网,或者其他國(guó)家語(yǔ)言字符)的集合呀忧,字符集種類(lèi)較多,每個(gè)字符集包含的字符個(gè)數(shù)不同溃睹。
1)特點(diǎn):
①字符編碼方式是用一個(gè)或多個(gè)字節(jié)表示字符集中的一個(gè)字符
②每種字符集都有自己特有的編碼方式而账,因此同一個(gè)字符,在不同字符集的編碼方式下因篇,會(huì)產(chǎn)生不同的二進(jìn)制
2)常見(jiàn)字符集:
ASCII字符集:基于羅馬字母表的一套字符集泞辐,它采用1個(gè)字節(jié)的低7位表示字符,高位始終為0竞滓。
LATIN1字符集:相對(duì)于ASCII字符集做了擴(kuò)展铛碑,仍然使用一個(gè)字節(jié)表示字符,但啟用了高位虽界,擴(kuò)展了字符集的表示范圍汽烦。
GBK字符集:支持中文,字符有一字節(jié)編碼和兩字節(jié)編碼方式莉御。
UTF8字符集:Unicode字符集的一種撇吞,是計(jì)算機(jī)科學(xué)領(lǐng)域里的一項(xiàng)業(yè)界標(biāo)準(zhǔn)俗冻,支持了所有國(guó)家的文字字符,utf8采用1-4個(gè)字節(jié)表示字符牍颈。
二迄薄、校對(duì)規(guī)則
校對(duì)規(guī)則(collation):是在字符集內(nèi)用于字符比較和排序的一套規(guī)則,比如有的規(guī)則區(qū)分大小寫(xiě)煮岁,有的則無(wú)視讥蔽。
三.? utf8_bin、utf8_general_ci與utf8_unicode_ci的區(qū)別画机。
ci是 case insensitive, 即 "大小寫(xiě)不敏感", a 和 A 會(huì)在字符判斷中會(huì)被當(dāng)做一樣的;
bin 是二進(jìn)制, a 和 A 會(huì)別區(qū)別對(duì)待.
例如你運(yùn)行:?
? ? ? ? ? ? ? ? ?SELECT * FROM table WHERE txt = 'a';
那么在utf8_bin中你就找不到 txt = 'A' 的那一行, 而 utf8_general_ci 則可以冶伞。
1) utf8_general_ci 不區(qū)分大小寫(xiě),這個(gè)你在注冊(cè)用戶名和郵箱的時(shí)候就要使用步氏。
2) utf8_general_cs 區(qū)分大小寫(xiě)响禽,如果用戶名和郵箱用這個(gè) 就會(huì)照成不良后果。
3) utf8_bin:字符串每個(gè)字符串用二進(jìn)制數(shù)據(jù)編譯存儲(chǔ)荚醒。 區(qū)分大小寫(xiě)芋类,而且可以存二進(jìn)制的內(nèi)容。
4) utf8_unicode_ci和utf8_general_ci對(duì)中界阁、英文來(lái)說(shuō)沒(méi)有實(shí)質(zhì)的差別侯繁。
5) utf8_general_ci校對(duì)速度快,但準(zhǔn)確度稍差泡躯。(準(zhǔn)確度夠用巫击,一般建庫(kù)選擇這個(gè))
6) utf8_unicode_ci準(zhǔn)確度高,但校對(duì)速度稍慢精续。
四.?utf8_general_ci與utf8_unicode_ci的區(qū)別
一般的解說(shuō)是 utf8_general_ci 速度較快坝锰,utf8_unicode_ci 準(zhǔn)確性較好 … 但快在哪里,又好在什么地方呢重付?
首先就其準(zhǔn)確性說(shuō)顷级,這世界上有無(wú)數(shù)種文字,除了通用的英文使用我們較熟悉的 A-Z 字符外确垫,還有很多種近似的寫(xiě)法用于法文弓颈、德文、俄文等等删掀。
光是一個(gè) A 字就有數(shù)十種不同表現(xiàn)
為什么不都用同一種 A 呢翔冀,幾十種多麻煩啊。事實(shí)上披泪,它們?cè)谒鶎俚奈淖稚隙几饔幸饬x纤子,可能代表不同的發(fā)音,也可能是其他東西。在某些語(yǔ)言上控硼,同一個(gè)單詞不同發(fā)音可能就代表兩個(gè)意思泽论。
校對(duì)規(guī)則
utf8_unicode_ci 及 utf8_general_ci 的用途就是對(duì)那些看起來(lái)不一樣的字符進(jìn)行轉(zhuǎn)換,令我們進(jìn)行排序比對(duì)時(shí)更方便準(zhǔn)確卡乾。
以下面為例翼悴,直接看起來(lái)是不相等的,但在實(shí)際應(yīng)用上是成立的幔妨,這就是 utf8_unicode_ci 及 utf8_general_ci 工作的結(jié)果鹦赎。
? = A
? = O
ü = U
utf8_unicode_ci的最主要的特色是支持?jǐn)U展,將一個(gè)特別字符轉(zhuǎn)換成多于一個(gè)英文字符即當(dāng)把一個(gè)字母看作其它字母組合相等误堡。以德文中的 s 例:
在 utf8_unicode_ci 下面等式是成立
? = ss
在 utf8_general_ci 只有這樣才成立
? = s
而 且utf8_unicode_ci 準(zhǔn)確性較好還表現(xiàn)在它有更完整的字元對(duì)照表上古话。因?yàn)?utf8_unicode_ci 有更完整字符表及轉(zhuǎn)換規(guī)則,所以在排序的準(zhǔn)確性上也比 utf8_general_ci 高一些埂伦。
以上utf8_general_ci 字符表的一部份
utf8_unicode_ci 有更完整的字符表
效能:同樣因?yàn)?utf8_unicode_ci 的字符表及轉(zhuǎn)換規(guī)則更復(fù)雜,所以在效能上比 utf8_general_ci 慢思恐。
總結(jié):如果你的應(yīng)用是德文沾谜、俄文等等,或者需要精確處理國(guó)際化的內(nèi)容胀莹,請(qǐng)用 utf8_unicode_ci 基跑。否則的話用 utf8_general_ci 就可以了。
備注:雖然說(shuō) utf8_unicode_ci 的字集比較完整描焰,但其實(shí)還是不全的媳否,所以 MySQL 還提供了很多種其他語(yǔ)言的專(zhuān)用字集,用于特別的本地應(yīng)用荆秦,詳細(xì)可以看看下面的官網(wǎng)連結(jié)
轉(zhuǎn)載自https://www.jb51.net/article/48775.htm
https://www.cnblogs.com/geaozhang/p/6724393.htmlutm_source=itdadao&utm_medium=referral
https://www.cnblogs.com/sunsoftware/p/4604773.html