django儲存資料到表時,遇到字符集問題--已解決

趣_学發表於2024-03-11

問題迴歸:

在開發《測試平臺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,完美解決:

相關文章