偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

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

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

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

什么是編碼?

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

utf8就是這樣一種編碼格式,正式點要使用:UTF-8,utf8是一個簡寫形式。

為什么需要utf8?

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

UTF-8就像一個萬能翻譯官,它的全稱是“Unicode Transformation Format - 8 bit”,注意這里不是說UTF-8只能使用8bit來表示一個字符,實際上UTF-8能表示世界上幾乎所有的字符。

它的特點是:

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

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

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

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

圖片

utf8mb4又是什么?

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

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

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

utf8和utf8mb4的比較

存儲空間

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

性能影響

  • 數(shù)據(jù)庫:utf8mb4的查詢和索引可能稍微慢一些,因為占用更多的空間和內(nèi)存。
  • 網(wǎng)絡傳輸:utf8mb4編碼的字符會占用更多的帶寬,傳輸速度可能會稍慢。

不過因為實際場景中使用的utf8mb4的字符也不多,其實對存儲空間和性能的影響很小,大家基本沒有必要因為多占用了一些空間和流量,而不是用utf8mb4。

只是我們在定義字段長度、規(guī)劃數(shù)據(jù)存儲空間、網(wǎng)絡帶寬的時候,要充分考慮4字節(jié)帶來的影響,預留好足夠的空間。

實戰(zhàn)選擇

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

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

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


責任編輯:武曉燕 來源: 螢火架構
相關推薦

2024-05-29 13:05:44

2018-06-25 14:29:45

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

2017-12-11 10:12:26

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

2021-10-13 14:06:46

MySQLUtf8符號

2023-01-03 18:32:32

2024-08-07 09:02:51

2024-06-17 10:16:37

MySQLutf8mb4字節(jié)

2022-05-18 08:25:59

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

2012-10-18 14:46:01

Windows RTWindows 8

2023-04-06 08:37:24

2016-09-12 16:19:38

MySQL存儲數(shù)據(jù)庫

2020-09-22 09:05:45

MySQLUTF-8utf8mb4

2025-05-13 01:10:00

數(shù)據(jù)產(chǎn)品開發(fā)

2023-12-15 09:21:17

ObjectJavaString

2021-07-20 08:23:49

HTTPWebSocketWeb

2021-05-12 07:43:02

LinuxUnicodeUTF-8

2024-03-27 18:22:58

Hadoop部件生態(tài)

2021-05-08 07:14:38

MySQL數(shù)據(jù)庫安全性

2023-02-10 09:43:51

架構開發(fā)

2022-07-27 07:45:53

二叉樹鏡像函數(shù)
點贊
收藏

51CTO技術棧公眾號