自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

一篇講明白Utf8和Utf8mb4有什么區(qū)別

開(kāi)發(fā) 前端
在計(jì)算機(jī)早期,主要使用ASCII編碼,只能表示128個(gè)字符,漢字完全表示不了。后來(lái),才出現(xiàn)了各種各樣的編碼方式,比如GB2312、GBK、BIG5,但這些編碼只能在特定的環(huán)境下使用,不能全球通用。

utf8或者utf-8是大家常見(jiàn)的一個(gè)詞匯,它是一種信息的編碼格式,特別是不同開(kāi)發(fā)平臺(tái)的系統(tǒng)進(jìn)行對(duì)接的時(shí)候,編碼一定要對(duì)齊,否則就容易出現(xiàn)亂碼。

什么是編碼?

先說(shuō)說(shuō)什么是編碼。編碼就像我們?nèi)粘I钪械恼Z(yǔ)言,不同的地方說(shuō)不同的話,編碼就是計(jì)算機(jī)用來(lái)表示這些“話”的一種方式。比如我們使用漢字來(lái)說(shuō)話,計(jì)算機(jī)用二進(jìn)制數(shù)來(lái)表示這些漢字的方式,就是編碼。

utf8就是這樣一種編碼格式,正式點(diǎn)要使用:UTF-8,utf8是一個(gè)簡(jiǎn)寫(xiě)形式。

為什么需要utf8?

在計(jì)算機(jī)早期,主要使用ASCII編碼,只能表示128個(gè)字符,漢字完全表示不了。后來(lái),才出現(xiàn)了各種各樣的編碼方式,比如GB2312、GBK、BIG5,但這些編碼只能在特定的環(huán)境下使用,不能全球通用。

UTF-8就像一個(gè)萬(wàn)能翻譯官,它的全稱是“Unicode Transformation Format - 8 bit”,注意這里不是說(shuō)UTF-8只能使用8bit來(lái)表示一個(gè)字符,實(shí)際上UTF-8能表示世界上幾乎所有的字符。

它的特點(diǎn)是:

  • 變長(zhǎng)編碼:一個(gè)字符可以用1到4個(gè)字節(jié)表示,英文字符用1個(gè)字節(jié)(8bit),漢字用3個(gè)字節(jié)(24bit)。
  • 向后兼容ASCII:ASCII的字符在UTF-8中還是一個(gè)字節(jié),這樣就兼容了老系統(tǒng)。
  • 節(jié)省空間:對(duì)于英文字符,UTF-8比其他多字節(jié)編碼更省空間。

UTF-8適用于網(wǎng)頁(yè)、文件系統(tǒng)、數(shù)據(jù)庫(kù)等需要全球化支持的場(chǎng)景。

經(jīng)常接觸代碼的同學(xué)應(yīng)該還經(jīng)常能看到 Unicode 這個(gè)詞,它和編碼也有很大的關(guān)系,其實(shí)Unicode是一個(gè)字符集標(biāo)準(zhǔn),utf8只是它的一種實(shí)現(xiàn)方式。Unicode 作為一種字符集標(biāo)準(zhǔn),為全球各種語(yǔ)言和符號(hào)定義了唯一的數(shù)字碼位(code points)。其它的Unicode實(shí)現(xiàn)方式還有UTF-16和UTF-32:

  • UTF-16 使用固定的16位(2字節(jié))或者變長(zhǎng)的32位(4字節(jié),不在常用字符之列)來(lái)編碼 Unicode 字符。
  • UTF-32 每一個(gè)字符都直接使用固定長(zhǎng)度的32位(4字節(jié))編碼,不論字符的實(shí)際數(shù)值大小。這會(huì)消耗更多的存儲(chǔ)空間,但是所有字符都可以直接索引訪問(wèn)。

圖片

utf8mb4又是什么?

utf8mb4并不常見(jiàn),它是UTF-8的一個(gè)擴(kuò)展版本,專門(mén)用于MySQL數(shù)據(jù)庫(kù)。MySQL在 5.5.3 之后增加了一個(gè)utf8mb4的編碼,mb4就是最多4個(gè)字節(jié)的意思(most bytes 4),它主要解決了UTF-8不能表示一些特殊字符的問(wèn)題,比如Emoji表情,這在論壇或者留言板中也經(jīng)常用到。大家使用小紅書(shū)時(shí)應(yīng)該見(jiàn)過(guò)各種各樣的表情符號(hào),小紅書(shū)后臺(tái)也可能使用utf8mb4保存它們。

編碼規(guī)則和特點(diǎn):

  • 最多4個(gè)字節(jié):utf8mb4中的每個(gè)字符最多用4個(gè)字節(jié)表示。
  • 支持更多字符:能表示更多的Unicode字符,包括Emoji和其他特殊符號(hào)。

utf8和utf8mb4的比較

存儲(chǔ)空間

  • 數(shù)據(jù)庫(kù):utf8mb4每個(gè)字符最多用4個(gè)字節(jié),比UTF-8多一個(gè)字節(jié),存儲(chǔ)空間會(huì)增加。
  • 文件:類似的,文件用utf8mb4編碼也會(huì)占用更多的空間。

性能影響

  • 數(shù)據(jù)庫(kù):utf8mb4的查詢和索引可能稍微慢一些,因?yàn)檎加酶嗟目臻g和內(nèi)存。
  • 網(wǎng)絡(luò)傳輸:utf8mb4編碼的字符會(huì)占用更多的帶寬,傳輸速度可能會(huì)稍慢。

不過(guò)因?yàn)閷?shí)際場(chǎng)景中使用的utf8mb4的字符也不多,其實(shí)對(duì)存儲(chǔ)空間和性能的影響很小,大家基本沒(méi)有必要因?yàn)槎嗾加昧艘恍┛臻g和流量,而不是用utf8mb4。

只是我們?cè)诙x字段長(zhǎng)度、規(guī)劃數(shù)據(jù)存儲(chǔ)空間、網(wǎng)絡(luò)帶寬的時(shí)候,要充分考慮4字節(jié)帶來(lái)的影響,預(yù)留好足夠的空間。

實(shí)戰(zhàn)選擇

在實(shí)際開(kāi)發(fā)中,選擇編碼要根據(jù)具體需求來(lái)定。如果你的網(wǎng)站或者應(yīng)用需要支持大量的特殊字符和Emoji,使用utf8mb4是個(gè)不錯(cuò)的選擇。如果主要是英文和普通中文文本,utf8足夠應(yīng)付。

注意為了避免亂碼問(wèn)題,前端、后端、數(shù)據(jù)庫(kù)都應(yīng)該使用同一種編碼,比如utf8,具體到編碼時(shí)就是要確保數(shù)據(jù)庫(kù)連接、網(wǎng)頁(yè)頭部、文件讀寫(xiě)都設(shè)置為相同的編碼。

另外還需要注意Windows和Linux系統(tǒng)中使用UTF-8編碼的文件可能是有差別的,Windows中的UTF-8文件可能會(huì)攜帶一個(gè)BOM頭,方便系統(tǒng)進(jìn)行識(shí)別,但是Linux中不需要這個(gè)頭,所以如果要跨系統(tǒng)使用這個(gè)文件,特別是程序腳本,可能需要在Linux中去掉這個(gè)頭。


責(zé)任編輯:武曉燕 來(lái)源: 螢火架構(gòu)
相關(guān)推薦

2024-05-29 13:05:44

2018-06-25 14:29:45

MySQLbug數(shù)據(jù)庫(kù)

2017-12-11 10:12:26

數(shù)據(jù)庫(kù)MySQL文本亂碼

2021-10-13 14:06:46

MySQLUtf8符號(hào)

2023-01-03 18:32:32

2024-06-17 10:16:37

MySQLutf8mb4字節(jié)

2022-05-18 08:25:59

MySQLutf8字符集數(shù)據(jù)庫(kù)

2012-10-18 14:46:01

Windows RTWindows 8

2024-08-07 09:02:51

2020-09-22 09:05:45

MySQLUTF-8utf8mb4

2016-09-12 16:19:38

MySQL存儲(chǔ)數(shù)據(jù)庫(kù)

2023-04-06 08:37:24

2021-05-12 07:43:02

LinuxUnicodeUTF-8

2023-12-15 09:21:17

ObjectJavaString

2021-07-20 08:23:49

HTTPWebSocketWeb

2023-12-11 18:23:21

2023-02-10 09:43:51

架構(gòu)開(kāi)發(fā)

2022-07-27 07:45:53

二叉樹(shù)鏡像函數(shù)

2024-03-27 18:22:58

Hadoop部件生態(tài)

2021-05-08 07:14:38

MySQL數(shù)據(jù)庫(kù)安全性
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)