天天看點

django+xadmin插入資料庫報錯django.db.utils.OperationalError: (1366, "Incorrect string value: '\\xE4\\xBF\\x

問題:

在xadmin的界面,操作增加使用者或更改使用者權限,在儲存的時候報出以下錯誤:

django.db.utils.OperationalError: (1366, "Incorrect string value: '\\xE4\\xBF\\xAE\\xE6\\x94\\xB9...' for column 'message' at row 1")

經過查找分析出錯的原因有:

  • 在Python中插入資料庫要對資料轉碼成utf8,'中文'.encode("utf-8")
  • 操作mysql資料庫的時候,将資料插入表裡出錯

插入更新資料庫是xadmin自帶的,應該是資料庫編碼設定的問題,是以第一種方式排除;隻從第二種原因找突破:

  1. 檢視資料庫的編碼格式
show variables like "%char%";
           
django+xadmin插入資料庫報錯django.db.utils.OperationalError: (1366, "Incorrect string value: '\\xE4\\xBF\\x

發現character_set_database 編碼是latin1不是utf8,問題應該就在這裡。

那我們現在就要把這個字元改過來。

應該注意,吧字元集編碼是latin1的都改成utf8

set character_set_database='utf8';
           
django+xadmin插入資料庫報錯django.db.utils.OperationalError: (1366, "Incorrect string value: '\\xE4\\xBF\\x

再次測試後發現還是有問題。

然後檢視了下django連接配接的資料庫,以及生成的表的編碼發現編碼不是utf8,是以這裡還要修改資料庫,表的編碼

  • 檢視資料庫的編碼:show create database databaseName;
show create database test;
           
django+xadmin插入資料庫報錯django.db.utils.OperationalError: (1366, "Incorrect string value: '\\xE4\\xBF\\x

發現這裡也是latin1,同樣,吧這個改成utf8

  • 修改資料庫編碼: alter database databaseName default character set utf8 collate utf8_general_ci;
alter database test default character set utf8 collate utf8_general_ci;
           
django+xadmin插入資料庫報錯django.db.utils.OperationalError: (1366, "Incorrect string value: '\\xE4\\xBF\\x
  • 檢視建表的編碼:show create table tableName;

同理,修改後檢視編碼都已經是utf8了應該不會有錯了。

因為我這邊剛搭建的xadmin,我重新吧所有表删了,重新生成,操作插入更新都正常了。

删表的時候發現了點問題,這裡記錄一下

比如我删除了一個表:

drop table match_info;

然後重新運作

python manage.py makemigrations

python manage.py migrate

發現沒有效果,并沒有建立新的表match_info

然後發現django有這麼一個表django_migrations,需要把這個表或者找到相對應的記錄給删掉,我這邊是直接删除表

再運作

python manage.py makemigrations

python manage.py migrate

就好了