utf8與utf8mb4的區別

    最近在寫一個爬蟲的多線程腳本,在異步插入數據庫的時候總有部分數據插入失敗,緣由居然是編碼的問題。捫心自問,mysql最通用的中文字符編碼就是utf-8了,一般狀況下,utf-8做爲中文編碼是司空見慣的,可是仍是一如既往的寫入數據庫失敗。php

    原來MySQL在5.5.3版本以後增長了這個utf8mb4的編碼,mb4就是most bytes 4的意思,專門用來兼容四字節的unicode。其實,utf8mb4是utf8的超集,理論上原來使用utf8,而後將字符集修改成utf8mb4,也會不會對已有的utf8編碼讀取產生任何問題。固然,爲了節省空間,通常狀況下使用utf8也就夠了。低版本的MySQL支持的utf8編碼,最大字符長度爲 3 字節,若是遇到 4 字節的字符就會出現錯誤了。mysql

    UTF-8 最大能編碼的 Unicode 字符是 0xFFFF,也就是 Unicode 中的基本多文平面(BMP)。也就是說,任何不在基本多文平面的 Unicode字符,都沒法使用MySQL原有的 utf8 字符集存儲。這些不在BMP中的字符包括哪些呢?最多見的就是Emoji 表情(Emoji 是一種特殊的 Unicode 編碼,常見於 ios 和 android 手機上),和一些不經常使用的漢字,以及任何新增的 Unicode 字符等等。理論上講, UTF-8 格式使用一至六個字節,最大能編碼 31 位字符。最新的 UTF-8 規範只使用一到四個字節,最大能編碼21位,正好可以表示全部的 17個 Unicode 平面。爲了獲取更好的兼容性,應該老是使用 utf8mb4 而非 utf8,事實上,最新版的phpmyadmin默認字符集就是utf8mb4。誠然,對於 CHAR 類型數據,使用utf8mb4 存儲會多消耗一些空間。android

相關文章
相關標籤/搜索