一、背景
爬取資料過程中,會遇到一些特殊的字元入庫出錯的問題,比如二進制資料、比如特殊文字(類似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.