問題:
在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自帶的,應該是資料庫編碼設定的問題,是以第一種方式排除;隻從第二種原因找突破:
- 檢視資料庫的編碼格式
show variables like "%char%";
發現character_set_database 編碼是latin1不是utf8,問題應該就在這裡。
那我們現在就要把這個字元改過來。
應該注意,吧字元集編碼是latin1的都改成utf8
set character_set_database='utf8';
再次測試後發現還是有問題。
然後檢視了下django連接配接的資料庫,以及生成的表的編碼發現編碼不是utf8,是以這裡還要修改資料庫,表的編碼
- 檢視資料庫的編碼:show create database databaseName;
show create database test;
發現這裡也是latin1,同樣,吧這個改成utf8
- 修改資料庫編碼: alter database databaseName default character set utf8 collate utf8_general_ci;
alter database test default character set utf8 collate utf8_general_ci;
- 檢視建表的編碼: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
就好了