При использвании фреймворка Django и субд MySQL после деплоя проекта на сервер или проведения миграций можно столкнуться со следующими ошибками:
1 2 | OperationalError (1267, “Illegal mix of collations (latin1_swedish_ci, IMPLICIT) and (utf8_general_ci, COERCIBLE) for operation ‘=’”) |
или
1 | (1366, “Incorrect string value: …. for column '...' ”) |
Подобные ошибки возникают при добавлении объекта в базу, в полях которого кириллические символы, а MySQL использует другую кодировку.
Решение проблемы довольно простое. Можно вручную поменять кодировки таблиц напрямую. Или, путем программиста, выполнить файл со следующим содержанием в виртуальном окружении проекта:
1 2 3 4 5 6 7 8 9 10 11 | from django.db import connection cursor = connection.cursor() cursor.execute('SHOW TABLES') results=[] for row in cursor.fetchall(): results.append(row) for row in results: cursor.execute('ALTER TABLE %s CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;' % (row[0])) |
Также можно выполнить эти инструкции, воспользовавшиcь командной оболочкой проекта:
1 | python manage.py shell |
Поделиться: