該錯誤發生在將數據保存到數據庫的時候。
一、說明
1.Python: 3.7.4
python --version
2.Django: 2.2.5
python
import django
django.get_version()
3.MySQL:
select version();
4.system: win10
二、問題分析
看到這個問題,首先想到了編碼問題,然後查看數據庫編碼設置:
show variables like "%char%";
根據查詢,character_set_client,haracter_set_connection,character_set_results還是gbk編碼。
三、解決問題
根據show variables like "%char%";命令可以查詢到mysql在windows上的安裝目錄是: C:\Program Files\MySQL\MySQL Server 8.0\。
進入到以上C:\Program Files\MySQL\MySQL Server 8.0\目錄,打開my.ini文件。
1.在 [client]標籤下加上一行:default-character-set = utf8
2.在 [mysql] 標籤下加上一行:default-character-set = utf8
四、驗證修改
1.查看編碼
五、其他
有時候這個情況雖然中文可以保存了,但是emoj表情可能還是無法保存,如內容包含:
?
那麼需要在settings.py裏設置:
'OPTIONS': {'charset': 'utf8mb4'},
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': '127.0.0.1',
'PORT': '3306',
'USER': 'root',
'PASSWORD': '123456',
'NAME': 'mysite',
'OPTIONS': {'charset': 'utf8mb4'},
}
}