Django 數據庫保存中文報錯 django.db.utils.InternalError: 1366

給表中某條記錄添加中文描述是報錯:django.db.utils.InternalError: 1366…


原因:該表是通過Django model的方式創建的,查閱相關文檔(可能不全面)發現Django makemigration 在創建表的時候沒有可以指定charset的方式,所以表全部默認charset Latin1(encoding:cp 1252 West, collation: latin1_swedish_ci)。

解決方法:修改該字段的編碼格式。

先通過:
SHOW VARIABLES LIKE ‘character%’;
SHOW VARIABLES LIKE ‘collation_%’;
查看數據庫相關變量是否和上面類似,再進行修改。
相關信息:參考https://blog.csdn.net/haiross/article/details/51273593

  • 方法:
    alter table table-name convert to character set utf8mb4;
    這條語句直接將整張表的字符集設置爲utfmb4,不需要再對單個字段進行修改。
    注意:上面命令中使用的是convert !!!
    而非添加set(如果使用set,新添加字段時使用你設置的字符集,這沒毛病。但是對於已存在的字段並不做任何修改,這時候你可能還需要單獨修改某一字段。所以不如直接用convert一步到位的好)。
    單獨修改某一字段的數據集時使用:alter table table_name modify column_name longtext character set utf8mb4;

注意+1: 這在表數據量不大的情況下推薦使用。如果數量級非常大請謹慎使用!

發佈了37 篇原創文章 · 獲贊 10 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章