今天在測試小程序保存表情時,數據庫插入數據時報錯ER_TRUNCATED_WRONG_VALUE_FOR_FIELD: Incorrect string value: '\xF0\x9F\x98\x8B\xF0\x9F...' for column 'post' at row 1這個錯誤,Google了下發現原來是因為數據庫編碼問題導致的,原因在於我們的評論數據中存在emoj表情,而這些表情是按照四個字節一個單位進行編碼的,而我們通常使用的utf-8編碼在mysql數據庫中默認是按照3個字節一個單位進行編碼的,正是這個原因導致將數據存入mysql數據庫的時候出現錯誤!
MySQL在5.5.3之后增加了這個utf8mb4的編碼,mb4就是most bytes 4的意思,專門用來兼容四字節的unicode。好在utf8mb4是utf8的超集,除了將編碼改為utf8mb4外不需要做其他轉換。當然,為了節省空間,一般情況下使用utf8也就夠了。
理論上講, UTF-8 格式使用一至六個字節,最大能編碼 31 位字符。最新的 UTF-8 規范只使用一到四個字節,最大能編碼21位,正好能夠表示所有的 17個 Unicode 平面。
參考網址: