Aucune de ces réponses n'a résolu le problème pour moi. La cause principale étant :
Vous ne pouvez pas stocker de caractères à 4 octets dans MySQL avec le jeu de caractères utf-8.
MySQL a une limite 3 octets sur les caractères utf-8 (oui, c'est fou, bien résumé par un développeur Django ici )
Pour résoudre ce problème, vous devez :
- Modifiez votre base de données, votre table et vos colonnes MySQL pour utiliser jeu de caractères utf8mb4 (uniquement disponible à partir de MySQL 5.5)
- Spécifiez le jeu de caractères dans votre fichier de paramètres Django comme ci-dessous :
settings.py
DATABASES = {
'default': {
'ENGINE':'django.db.backends.mysql',
...
'OPTIONS': {'charset': 'utf8mb4'},
}
}
Remarque :lors de la recréation de votre base de données, vous pouvez rencontrer la 'La clé spécifiée était trop longue ' publier.
La cause la plus probable est un CharField
qui a un max_length de 255 et une sorte d'index dessus (par exemple unique). Étant donné que utf8mb4 utilise 33 % d'espace en plus que utf-8, vous devrez réduire ces champs de 33 %.
Dans ce cas, modifiez le max_length de 255 à 191.
Vous pouvez également modifier votre configuration MySQL pour supprimer cette restriction mais pas sans un peu de piratage Django
MISE À JOUR : Je viens de rencontrer à nouveau ce problème et j'ai fini par passer à PostgreSQL
car je n'ai pas pu réduire mon VARCHAR
à 191 caractères.