- 字符集氨菇、字符編碼
字符(Character)是各種文字和符號的總稱片效,包括各國家文字、標(biāo)點(diǎn)符號投储、圖形符號衡招、數(shù)字等篱昔。字符集(Character set)是多個字符的集合,字符集種類較多蚁吝,每個字符集包含的字符個數(shù)不同旱爆,常見字符集名稱:ASCII字符集舀射、GB2312字符集窘茁、BIG5字符集、 GB18030字符集脆烟、Unicode字符集等山林。
字符編碼是把字符集中的字符編碼為特定的二進(jìn)制數(shù),以便在計算機(jī)中存儲。編碼方式一般就是對二維表的橫縱坐標(biāo)進(jìn)行變換的算法驼抹。一般都比較簡單桑孩,直接把橫縱坐標(biāo)拼一起就完事了。后來隨著字符集的不斷擴(kuò)大框冀,為了節(jié)省存儲空間流椒,才出現(xiàn)了各種各樣的算法。
字符集和字符編碼一般都是成對出現(xiàn)的明也,如ASCII宣虾、IOS-8859-1、GB2312温数、GBK绣硝,都是即表示了字符集又表示了對應(yīng)的字符編碼,以后統(tǒng)稱為編碼撑刺。Unicode比較特殊鹉胖,后面細(xì)說。
- utf8mb4
MySQL在5.5.3之后增加了utf8mb4的編碼够傍,mb4即4-Byte UTF-8 Unicode Encoding甫菠,專門用來兼容四字節(jié)的unicode。utf8mb4為utf8的超集并兼容utf8冕屯,比utf8能表示更多的字符淑蔚。
- 為什么要用utf8mb4?
為什么還要使用utf8mb4呢? 低版本的MySQL支持的utf8編碼愕撰,最大字符長度為 3 字節(jié)刹衫,如果遇到 4 字節(jié)的字符就會出現(xiàn)錯誤了。三個字節(jié)的 UTF-8 最大能編碼的 Unicode 字符是 0xFFFF搞挣,也就是 Unicode 中的基本多文平面(BMP)带迟。也就是說,任何不在基本多文平面的 Unicode字符囱桨,都無法使用MySQL原有的 utf8 字符集存儲仓犬。這些不在BMP中的字符包括哪些呢?最常見的就是Emoji 表情(Emoji 是一種特殊的 Unicode 編碼舍肠,常見于 ios 和 android 手機(jī)上)搀继,和一些不常用的漢字,以及任何新增的 Unicode 字符等等翠语。
- utf8mb4編碼的使用
如果要在 MySQL中保存 4 字節(jié)長度的 UTF-8 字符叽躯,就需要使用 utf8mb4 編碼,但是要注意只有 5.5.3 版本以后的MySQL才支持(查看版本命令: select version())肌括。為了獲取更好的兼容性点骑,建議使用 utf8mb4 而非 utf8. 對于CHAR類型數(shù)據(jù),utf8mb4會多消耗一些空間,但根據(jù) MySQL官方建議黑滴,可以使用 VARCHAR 替代 CHAR憨募。
ps:char是一種固定長度的類型,varchar則是一種可變長度的類型(因?yàn)閏har長度固定袁辈,方便程序的存儲與查找菜谣,所以char類型存取速度優(yōu)于varchar,即以空間換效率)
參考: