utf8和utf8mb4的區別

2021-10-05 04:52:25 字數 1085 閱讀 4934

二、起源

mysql在5.5.3之後增加了這個utf8mb4的編碼,mb4就是most bytes 4的意思,專門用來相容四位元組的unicode。好在utf8mb4是utf8的超集,除了將編碼改為utf8mb4外不需要做其他轉換。當然,為了節省空間,一般情況下使用utf8也就夠了。

可以簡單的理解 utf8mb4 是目前最大的乙個字元編碼,支援任意文字。

三、為什麼mysql有utf8和utf8mb4兩種幾乎差不多的字符集

utf8 是 mysql 中的一種字符集,只支援最長三個位元組的 utf-8字元,也就是 unicode 中的基本多文字平面。

mysql 中的 utf8 為什麼只支援持最長三個位元組的 utf-8字元呢?我想了一下,可能是因為 mysql 剛開始開發那會,unicode 還沒有輔助平面這一說呢。那時候,unicode 委員會還做著 「65535 個字元足夠全世界用了」的美夢。mysql 中的字串長度算的是字元數而非位元組數,對於 char 資料型別來說,需要為字串保留足夠的長。當使用 utf8 字符集時,需要保留的長度就是 utf8 最長字元長度乘以字串長度,所以這裡理所當然的限制了 utf8 最大長度為 3,比如 char(100) mysql 會保留 300位元組長度。至於後續的版本為什麼不對 4 位元組長度的 utf-8 字元提供支援,我想乙個是為了向後相容性的考慮,還有就是基本多文種平面之外的字元確實很少用到。

要在 mysql 中儲存 4 位元組長度的 utf-8 字元,需要使用 utf8mb4 字符集,但只有 5.5.3 版本以後的才支援。我覺得,為了獲取更好的相容性,應該總是使用 utf8mb4 而非 utf8. 對於 char 型別資料,utf8mb4 會多消耗一些空間,根據 mysql 官方建議,使用 varchar 替代 char。

五、新建mysql庫的排序規則

utf8_unicode_ci比較準確,utf8_general_ci速度比較快。通常情況下 utf8_general_ci的準確性就夠我們用的了,在我看過很多程式原始碼後,發現它們大多數也用的是utf8_general_ci,所以新建資料 庫時一般選用utf8_general_ci就可以了

如果是utf8mb4那麼對應的就是 utf8mb4_general_ci utf8mb4_unicode_ci

utf8和utf8mb4的區別

一 簡介 mysql在5.5.3之後增加了這個utf8mb4的編碼,mb4就是most bytes 4的意思,專門用來相容四位元組的unicode。好在utf8mb4是utf8的超集,除了將編碼改為utf8mb4外不需要做其他轉換。當然,為了節省空間,一般情況下使用utf8也就夠了。二 內容描述 那...

utf8和utf8mb4的區別

一 簡介 mysql在5.5.3之後增加了這個utf8mb4的編碼,mb4就是most bytes 4的意思,專門用來相容四位元組的unicode。好在utf8mb4是utf8的超集,除了將編碼改為utf8mb4外不需要做其他轉換。當然,為了節省空間,一般情況下使用utf8也就夠了。二 內容描述 那...

utf8和utf8mb4的區別

一 簡介 mysql在5.5.3之後增加了這個utf8mb4的編碼,mb4就是most bytes 4的意思,專門用來相容四位元組的unicode。好在utf8mb4是utf8的超集,除了將編碼改為utf8mb4外不需要做其他轉換。當然,為了節省空間,一般情況下使用utf8也就夠了。二 內容描述 那...