django.db.utils.OperationalError: (1366, "Incorrect string value: '\\xF0\\x9F\\x90\\x8D \\xC2...' )

該錯誤發生在將數據保存到數據庫的時候。

一、說明

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'},
    }

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章