Nessuna di queste risposte mi ha risolto il problema. La causa principale è:
Non puoi memorizzare caratteri a 4 byte in MySQL con il set di caratteri utf-8.
MySQL ha un 3 byte limite su utf-8 caratteri (sì, è strano, ben riassunto da uno sviluppatore Django qui )
Per risolvere questo è necessario:
- Cambia il database, la tabella e le colonne MySQL per utilizzare set di caratteri utf8mb4 (disponibile solo da MySQL 5.5 in poi)
- Specifica il set di caratteri nel file delle impostazioni di Django come di seguito:
impostazioni.py
DATABASES = {
'default': {
'ENGINE':'django.db.backends.mysql',
...
'OPTIONS': {'charset': 'utf8mb4'},
}
}
Nota:durante la ricreazione del database, potresti imbatterti nella 'La chiave specificata era troppo lunga ' problema.
La causa più probabile è un CharField
che ha un max_length di 255 e una sorta di indice su di esso (ad esempio unico). Poiché utf8mb4 utilizza il 33% di spazio in più rispetto a utf-8, dovrai ridurre questi campi del 33%.
In questo caso, cambia max_length da 255 a 191.
In alternativa puoi modificare la tua configurazione MySQL per rimuovere questa restrizione ma non senza qualche hackeraggio di django
AGGIORNAMENTO: Ho appena riscontrato di nuovo questo problema e ho finito per passare a PostgreSQL
perché non sono stato in grado di ridurre il mio VARCHAR
a 191 caratteri.