問題迴歸:
在開發《測試平臺imos》時,呼叫下載介面後,儲存返回報文亂碼包含一大堆??時,報錯:
查詢了下資料,是由於編碼位數不同引起的, 在mysql中預設的utf8是3位的:
??表情已經超過了三位位, 所以用三位空間儲存空間肯定出問題。知道了原因那解決起來就簡簡單單了。
解決方式:
1.開啟mysql配置檔案,my.cnf,修改以下配置,如果沒有就加上(我這裡使用的是mysql5.7)
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
character-set-client-handshake =FALSE
character-set-server =utf8mb4
collation-server =utf8mb4_unicode_ci
2.重啟mysql
docker restart mysql5.7
3.資料庫 、表 、 欄位資料庫修改
資料庫修改:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
表修改:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
欄位修改:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# 注意這裡的database_name,table_name,column_name,191都是根據自身情況進行修改的
以上措施弄完後,發現還是不行,深深的陷入思考中????
最後在查詢django官方文件時,發現在setting配置資料庫時,預設字符集為uft8,那改為utf8mb4,完美解決: