Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django - (1366, "Incorrect string value:... error

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.

like image 614
zeynel Avatar asked Aug 13 '17 22:08

zeynel


1 Answers

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;
like image 107
fsouza Avatar answered Nov 01 '22 07:11

fsouza