Keine dieser Antworten löste das Problem für mich. Die Hauptursache ist:
Sie können keine 4-Byte-Zeichen in MySQL mit dem UTF-8-Zeichensatz speichern.
MySQL hat eine 3-Byte-Grenze für UTF-8-Zeichen (Ja, es ist verrückt, schön zusammengefasst von einem Django-Entwickler hier )
Um dies zu lösen, müssen Sie:
- Ändern Sie Ihre MySQL-Datenbank, -Tabelle und -Spalten, um den utf8mb4 Zeichensatz (erst verfügbar ab MySQL 5.5)
- Geben Sie den Zeichensatz in Ihrer Django-Einstellungsdatei wie folgt an:
settings.py
DATABASES = {
'default': {
'ENGINE':'django.db.backends.mysql',
...
'OPTIONS': {'charset': 'utf8mb4'},
}
}
Hinweis:Wenn Sie Ihre Datenbank neu erstellen, können Sie auf 'Der angegebene Schlüssel war zu lang stoßen ' Ausgabe.
Die wahrscheinlichste Ursache ist ein CharField
die eine max_length von 255 und eine Art Index darauf hat (z. B. eindeutig). Da utf8mb4 33 % mehr Speicherplatz benötigt als utf-8, müssen Sie diese Felder um 33 % kleiner machen.
Ändern Sie in diesem Fall max_length von 255 auf 191.
Alternativ können Sie Ihre MySQL-Konfiguration bearbeiten, um diese Einschränkung zu entfernen aber nicht ohne etwas Django-Hacker
AKTUALISIERUNG: Ich bin gerade wieder auf dieses Problem gestoßen und bin schließlich zu PostgreSQL gewechselt
weil ich meinen VARCHAR
nicht reduzieren konnte bis 191 Zeichen.