天天看點

解決mysql存儲特殊文字(表情符号)utf8mb4一、背景解決辦法

一、背景

爬取資料過程中,會遇到一些特殊的字元入庫出錯的問題,比如二進制資料、比如特殊文字(類似QQ表情)等。

Siberian Husky fighting
           

這樣的标題,後面就帶有一個表情。

在mysql存儲的時候,報錯資訊如下:

[Failure instance: Traceback: <class 'pymysql.err.InternalError'>: (1366, "Incorrect string value: '\\xF0\\x9F\\x90\\xB6' for column 'title' at row 1")
           

大緻意思是指title這個字段無法存儲這種字元。

解決辦法

經過網上搜尋mysql 1366,多方檢視後,終于找到了原因和解決的辦法。

是因為\xF0\x9F\x90\xB6 它通常是4個字元存儲,而mysql的utf8預設是3個字元存儲。

1、 更改代碼中資料庫連接配接的字元編碼charset為utf8mb4

MYSQL_CHARSET = 'utf8mb4'
           

2、将資料庫字元集編碼頁改成utf8mb4。

3、檢查資料表的字元編碼,保持同步。

4、最後确認資料表中的字段,存儲這種特殊文字的字段字元編碼也是utf8mb4

輸入圖檔說明

這樣就解決了這個問題。

如果你沒有小心處理好,可以嘗試建立一個資料庫,然後将預設的字元編碼設定為utf8mb4.