0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

MySQL中utf8和utf8mb4有什么區(qū)別

汽車玩家 ? 來源:IT生涯 ? 作者:IT生涯 ? 2020-04-12 19:21 ? 次閱讀

一、簡介

MySQL在5.5.3之后增加了這個utf8mb4的編碼,mb4就是most bytes 4的意思,專門用來兼容四字節(jié)的unicode。utf8mb4是utf8的超集,除了將編碼改為utf8mb4外不需要做其他轉(zhuǎn)換。當(dāng)然,為了節(jié)省空間,一般情況下使用utf8也就夠了。

二、內(nèi)容描述

那上面說了既然utf8能夠存下大部分中文漢字,那為什么還要使用utf8mb4呢? 原來mysql支持的 utf8 編碼最大字符長度為 3 字節(jié),如果遇到 4 字節(jié)的寬字符就會插入異常了。三個字節(jié)的 UTF-8 最大能編碼的 Unicode 字符是 0xffff,也就是 Unicode 中的基本多文種平面(BMP)。也就是說,任何不在基本多文本平面的 Unicode字符,都無法使用 Mysql 的 utf8 字符集存儲。包括 Emoji 表情(Emoji是一種特殊的 Unicode 編碼,常見于 iosandroid 手機(jī)上),和很多不常用的漢字,以及任何新增的 Unicode 字符等等(utf8的缺點(diǎn))。

通常,計算機(jī)在存儲字符時,會根據(jù)不同類型的字符以及編碼方式分配存儲空間。例如以下幾種編碼方式;

①ASCII編碼中,一個英文字母(不分大小寫)占用一個字節(jié)的空間,一個中文漢字占用兩個字節(jié)的空間。一個二進(jìn)制的數(shù)字序列,在計算機(jī)中作為一個數(shù)字單元存儲時,一般為8位二進(jìn)制數(shù),換算為十進(jìn)制。最小值0,最大值255。

②UTF-8編碼中,一個英文字符占用一個字節(jié)的存儲空間,一個中文(含繁體)占用三個字節(jié)的存儲空間。

③Unicode編碼中,一個英文占用兩個字節(jié)的存儲空間,一個中文(含繁體)占用兩個字節(jié)的存儲空間。

④UTF-16編碼中,一個英文字母字符或一個漢字字符存儲都需要占用2個字節(jié)的存儲空間(Unicode擴(kuò)展區(qū)的一些漢字存儲需要4個字節(jié))。

⑤UTF-32編碼中,世界上任何字符的存儲都需要占用4個字節(jié)的存儲空間。

既然utf8能兼容絕大部分的字符,為什么要擴(kuò)展utf8mb4?

隨著互聯(lián)網(wǎng)的發(fā)展,產(chǎn)生了許多新類型的字符,例如emoji這種類型的符號,也就是我們通常在聊天時發(fā)的小黃臉表情,這種字符的出現(xiàn)不在基本多平面的Unicode字符之中,導(dǎo)致無法在MySQL中使用utf8存儲,MySQL于是對utf8字符進(jìn)行了擴(kuò)展,增加了utf8mb4這個編碼。

所以,設(shè)計數(shù)據(jù)庫時如果想要允許用戶使用特殊符號,最好使用utf8mb4編碼來存儲,使得數(shù)據(jù)庫有更好的兼容性,但是這樣設(shè)計會導(dǎo)致耗費(fèi)更多的存儲空間。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • MySQL
    +關(guān)注

    關(guān)注

    1

    文章

    789

    瀏覽量

    26283
收藏 人收藏

    評論

    相關(guān)推薦

    IG902如何上傳數(shù)據(jù)到MQTT云平臺EMQX ?

    =utf8MB4; 1 rows in set(0.00sec) MySQL主題訂閱表 mqtt_sub 存儲設(shè)備的主題訂閱關(guān)系: DROPTABLEIFEXISTS`mqtt_sub
    發(fā)表于 07-25 07:09

    stm8s005與stm8s105 32管腳什么區(qū)別?

    stm8s005與stm8s10532管腳的什么區(qū)別
    發(fā)表于 04-29 08:37

    采用UTF8UTF16都無法使用中文SSID怎么解決?

    采用 UTF8UTF16都無法使用中文SSID 將wifi ssid設(shè)置為 \" test12 \",分別用了以下 3種 unicode編解碼格格式,測試情況分分如下: 1.格式一:UTF-16LE 2.G格式二:
    發(fā)表于 02-29 06:36

    CY8C624ABZI-D44的2M閃存和CY8C6247BZI-D54的1M閃存\"電流消耗\"什么區(qū)別嗎?

    , CY8C6247BZI-D54 1MB 閃存 CY8C624ABZI-D44 2MB
    發(fā)表于 01-31 07:36

    T2G的CY8CKIT-005和CY8CKIT-005-A什么區(qū)別嗎?

    你能告訴我T2G的CY8CKIT-005和CY8CKIT-005-A什么區(qū)別嗎?
    發(fā)表于 01-29 08:31

    使用Solopace.Gem遠(yuǎn)程訪問內(nèi)網(wǎng)ERP-dolibarr

    default character set utf8mb4 collate utf8mb4_unicode_ci; grant all privileges on dolibarr_db.
    的頭像 發(fā)表于 12-25 11:45 ?567次閱讀
    使用Solopace.Gem遠(yuǎn)程訪問內(nèi)網(wǎng)ERP-dolibarr

    單片機(jī)也可以輕松玩轉(zhuǎn)UTF-8碼和TTF字體了

    要讓智能設(shè)備支持各國不同的文字,首先得有支持全球文字的編碼集,時下最出名的要數(shù)UTF-8碼了。
    的頭像 發(fā)表于 11-23 17:18 ?3336次閱讀
    單片機(jī)也可以輕松玩轉(zhuǎn)<b class='flag-5'>UTF-8</b>碼和TTF字體了

    mysql數(shù)據(jù)庫默認(rèn)字符編碼是什么

    MySQL數(shù)據(jù)庫的默認(rèn)字符編碼是utf8mb4。下面我將詳細(xì)介紹MySQL數(shù)據(jù)庫的字符編碼相關(guān)知識,并展開討論相應(yīng)的配置、應(yīng)用和注意事項。 一、MySQL數(shù)據(jù)庫字符編碼簡介 什么是字符
    的頭像 發(fā)表于 11-16 14:50 ?1286次閱讀

    mysql8.0默認(rèn)字符集是什么

    字符集,但是在MySQL 8.0之前,默認(rèn)的字符集是 utf8。 utf8mb4MySQL 8.0 引入的新字符集,它是 utf8
    的頭像 發(fā)表于 11-16 14:48 ?1587次閱讀

    STM8L的等待模式和HALT模式什么區(qū)別?

    STM8L的等待模式和HALT模式什么區(qū)別
    發(fā)表于 10-13 08:26

    字庫的不同編碼方式什么區(qū)別?

    比如說GB2312和UTF-8這兩個什么不同的地方
    發(fā)表于 10-12 07:02

    STM8S003和STM8S103兩個主控什么區(qū)別

    STM8S003和STM8S103兩個主控什么區(qū)別
    發(fā)表于 10-11 08:32

    MyBatis Plus如何簡化開發(fā)

    CHARSET = utf8mb4 COLLATE = utf8mb4_bin; 向 USER 表插入兩條數(shù)據(jù): INSERT INTO ` user ` VALUES ( '1' , 'IT可樂
    的頭像 發(fā)表于 10-09 15:08 ?343次閱讀
    MyBatis Plus如何簡化開發(fā)

    IARUTF-8文字符串不顯示怎么解決?

    界面使用的是ucGUI原本使用GB2312編碼的字符串可以直接讀取顯示,字庫也用FontCvt做了初始化的時候也添加了GUI_UC_SetEncodeutf8();函數(shù) 后面換成UTF-8的中文字
    發(fā)表于 10-07 07:11

    CRUD如何簡化開發(fā)

    DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_bin; 向 USER 表插入兩條數(shù)據(jù): INSERT INTO ` user ` VALUES ( '1
    的頭像 發(fā)表于 09-25 15:43 ?395次閱讀
    CRUD如何簡化開發(fā)