I am getting the following error when I try to add a new record via django
admin:
OperationalError at /admin/competition/sport/add/ (1366, "Incorrect string value: '\xC4\x9F\xC3\xBC' for column 'object_repr' at row 1") Request Method: POST Request URL: http://127.0.0.1:8000/admin/competition/sport/add/ Django Version: 1.11.4 Exception Type: OperationalError Exception Value:
(1366, "Incorrect string value: '\xC4\x9F\xC3\xBC' for column 'object_repr' at row 1")
Here is the model:
class Sport(models.Model):
is_team = models.BooleanField(_("Is Team"))
name = models.CharField(_("Name"), max_length=200)
And options for mysql
backend at my settings.py
:
'OPTIONS': {
'charset': 'utf8mb4',
'init_command': 'SET character_set_connection=utf8mb4;'
'SET collation_connection=utf8mb4_unicode_ci;'
"SET NAMES 'utf8mb4';"
"SET CHARACTER SET utf8mb4;"
},
I have updated all of the tables and columns to use utf8mb4
as described here
Nothing has worked so far. I get no error when I try to insert a record that contains unicode characters using mysql
shell, but the django
admin gives the error above.
Edit:
Interestingly the code below works perfectly when i try to insert a record manually:
Sport(is_team=True, name="ÜĞüiğÇÖ").save()
EDIT 2:
I finally figured what causes the problem. Django admin logs every action by default (including the data, in my case it was some weird unicode text). It turns out 'django_admin_log' table has 'latin1' charset, so i simply converted it into utf8:
ALTER TABLE django_admin_log CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Then everything worked fine.
You have to modify the django_admin_log character set
ALTER TABLE django_admin_log CHANGE object_repr object_repr VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With