mysql儲存utf 8資料時有表情問題

2021-08-22 02:39:32 字數 2074 閱讀 9583

從網路中取下的資料解析後不能插入資料庫,提示某個欄位有問題,問題提示如下:

sqlexception: incorrect string value:'\xf0\x9f\x98\x84'forcolumn'wei_content'at row1

查閱資料後發現,是由於emoji字元和資料庫有差異,不能直接儲存

解決方案一:

將內容中的emoji字元去掉:

publicstring removenonbmpunicode(string str)

str = str.replaceall("[^\\u0000-\\uffff]","");

returnstr;

}

解決方案二:

設定資料庫引數:

1.將mysql編碼從utf8轉換成utf8mb4:

修改mysql安裝目錄下的my.cnf

2.修改資料表的編碼為utf8mb4

執行命令:alter table table_name convert to character set utf8mb4;

或者直接使用圖形化介面修改

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

為什麼會有utf8mb4?

既然utf8應付日常使用完全沒有問題,那為什麼還要使用utf8mb4呢? 低版本的mysql支援的utf8編碼,最大字元長度為 3 位元組,如果遇到 4 位元組的字元就會出現錯誤了。三個位元組的 utf-8 最大能編碼的 unicode 字元是 0xffff,也就是 unicode 中的基本多文平面(bmp)。也就是說,任何不在基本多文平面的 unicode字元,都無法使用mysql原有的 utf8 字符集儲存。這些不在bmp中的字元包括哪些呢?最常見的就是emoji 表情(emoji 是一種特殊的 unicode 編碼,常見於 ios 和 android 手機上),和一些不常用的漢字,以及任何新增的 unicode 字元等等。

utf-8編碼

理論上將, utf-8 格式使用一至六個位元組,最大能編碼 31 位字元。最新的 utf-8 規範只使用一到四個位元組,最大能編碼21位,正好能夠表示所有的 17個 unicode 平面。關於utf編碼,請閱讀《常見編碼總結》一文。

而utf8 則是 mysql 早期版本中支援的一種字符集,只支援最長三個位元組的 utf-8字元,也就是 unicode 中的基本多文字平面。這可能是因為在mysql發布初期,基本多文種平面之外的字元確實很少用到。而在mysql5.5.3版本後,要在 mysql 中儲存 4 位元組長度的 utf-8 字元,就可以使用 utf8mb4 字符集了。例如可以用utf8mb4字元編碼直接儲存emoj表情,而不是存表情的替換字元。

為了獲取更好的相容性,應該總是使用 utf8mb4 而非 utf8,事實上,最新版的phpmyadmin預設字符集就是utf8mb4。誠然,對於 char 型別資料,使用utf8mb4 儲存會多消耗一些空間。

那麼utf8mb4比utf8多了什麼的呢?

多了emoji編碼支援.

如果實際用途上來看,可以給要用到emoji的庫或者說表,設定utf8mb4.

建議普通表使用utf8 如果這個表需要支援emoji就使用utf8mb4

新建mysql庫或者表的時候還有乙個排序規則

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

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

網頁utf 8亂碼 utf8亂碼

複製 在前 在windows作業系統上使用ie作為瀏覽器時。常常會發生這樣的問題 在瀏覽使用utf 8編碼的網頁時,瀏覽器無法自動偵測 即沒有設定 自動選擇 編碼格式時 該頁面所用的編碼。即使網頁已經宣告過編碼格式 由此造成某些含有中文utf 8編碼的頁面產生空白輸出。由於utf 8為3個位元組表示...

utf 8 和 utf8的區別小記

utf 8 是標準寫法,php 在 windows 下邊英文不區分大小寫,所以也可以寫成 utf 8 utf 8 也可以把中間的 省略,寫成 utf8 一般程式都能識別,但也有例外 如下文 為了嚴格一點,最好用標準的大寫 utf 8 在資料庫中只能使用 utf8 mysql 在mysql的命令模式中...

MySQL資料庫 utf 8與utf8mb4

mysql資料庫 utf 8與utf8mb4 mysql的 utf8 實際上不是真正的utf 8。mysql中的 utf8 只支援每個字元最多三個位元組,而真正的utf 8是每個字元最多四個位元組。mysql一直沒有修復這個bug,但是他們在2010年發布了乙個叫作 utf8mb4 的字符集,繞過了...