Inget av dessa svar löste problemet för mig. Grundorsaken är:
Du kan inte lagra 4-byte-tecken i MySQL med teckenuppsättningen utf-8.
MySQL har en 3 byte gräns på utf-8 tecken (ja, det är galet, bra sammanfattat av en Django-utvecklare här )
För att lösa detta behöver du:
- Ändra din MySQL-databas, tabell och kolumner för att använda utf8mb4 teckenuppsättning (endast tillgängligt från MySQL 5.5 och framåt)
- Ange teckenuppsättningen i din Django-inställningsfil enligt nedan:
settings.py
DATABASES = {
'default': {
'ENGINE':'django.db.backends.mysql',
...
'OPTIONS': {'charset': 'utf8mb4'},
}
}
Obs! När du återskapar din databas kan du stöta på "den angivna nyckeln var för lång ' problem.
Den mest troliga orsaken är ett CharField
som har en max_längd på 255 och något slags index på sig (t.ex. unikt). Eftersom utf8mb4 använder 33 % mer utrymme än utf-8 måste du göra dessa fält 33 % mindre.
I det här fallet ändrar du max_length från 255 till 191.
Alternativt kan du redigera din MySQL-konfiguration för att ta bort denna begränsning men inte utan något django-hackeri
UPPDATERING: Jag stötte precis på det här problemet igen och slutade med att bytte till PostgreSQL
eftersom jag inte kunde minska min VARCHAR
till 191 tecken.