Ninguna de estas respuestas resolvió el problema para mí. La causa raíz es:
No puede almacenar caracteres de 4 bytes en MySQL con el conjunto de caracteres utf-8.
MySQL tiene un límite de 3 bytes en caracteres utf-8 (sí, es una locura, muy bien resumido por un desarrollador de Django aquí )
Para solucionar esto necesitas:
- Cambie su base de datos MySQL, tablas y columnas para usar el conjunto de caracteres utf8mb4 (solo disponible desde MySQL 5.5 en adelante)
- Especifique el juego de caracteres en su archivo de configuración de Django como se muestra a continuación:
configuraciones.py
DATABASES = {
'default': {
'ENGINE':'django.db.backends.mysql',
...
'OPTIONS': {'charset': 'utf8mb4'},
}
}
Nota:Al recrear su base de datos, puede encontrarse con la 'La clave especificada era demasiado larga ' tema.
La causa más probable es un CharField
que tiene una longitud máxima de 255 y algún tipo de índice (por ejemplo, único). Debido a que utf8mb4 usa un 33 % más de espacio que utf-8, necesitará hacer que estos campos sean un 33 % más pequeños.
En este caso, cambie max_length de 255 a 191.
Alternativamente, puede editar su configuración de MySQL para eliminar esta restricción pero no sin algunos trucos de django
ACTUALIZACIÓN: Me encontré con este problema nuevamente y terminé cambiando a PostgreSQL
porque no pude reducir mi VARCHAR
hasta 191 caracteres.