Mysql utf8 和utf8mb4 的區別

2021-10-25 18:13:04 字數 1352 閱讀 5751

mysql 批量更改資料表和字段的字符集(mysql utf-8字符集更改為utf8mb4字符集)

我們新建mysql資料庫的時候,需要指定資料庫的字符集,一般我們都是選擇utf8這個字符集,但是還會又乙個utf8mb4這個字符集,好像和utf8有聯絡,今天就來解析一下這兩者的區別。

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

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

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

mysql 的「utf8mb4」是真正的「utf-8」。

mysql 的「utf8」是一種「專屬的編碼」,它能夠編碼的 unicode 字元並不多。

建議所有在使用「utf8」的 mysql 和 mariadb 使用者都應該改用「utf8mb4」,永遠都不要再使用「utf8」。不然很有可能出現編碼的問題,而且這種問題定位比較困難。

mysql utf8設定 mysql設定utf 8

mysql編碼為utf8設定方法 一 編輯mysql的配置檔案 vim etc my.cnf 在 mysqld 標籤下加上三行 default character set utf8 character set server utf8 在 mysql 標籤下加上一行 default character...

MySQL UTF8 中文亂碼處理

mysql安裝好後預設字符集不是utf8,因此顯示中文會有問題。在mysql可以執行 show variables like character 檢視當前字符集使用的編碼方式,如 以mysql 5.5版為例,在mysql安裝目錄下的my.ini 增加 mysql default character ...

perl 解決mysql utf8中文亂碼 問題

perl 解決mysql utf8中文亂碼 問題。mysql utf8 中文問題 zabbix root sbin cat a1.pl use dbi my dbuser devops my user root my passwd kjk123123 my dbh dbi connect dbi m...