Geen van deze antwoorden loste het probleem voor mij op. De hoofdoorzaak is:
U kunt geen 4-byte-tekens in MySQL opslaan met de utf-8-tekenset.
MySQL heeft een 3-byte limiet voor utf-8 tekens (ja, het is gek, mooi samengevat door een Django-ontwikkelaar hier )
Om dit op te lossen moet je:
- Wijzig uw MySQL-database, tabel en kolommen om de utf8mb4-tekenset (alleen beschikbaar vanaf MySQL 5.5)
- Specificeer de tekenset in uw Django-instellingenbestand zoals hieronder:
settings.py
DATABASES = {
'default': {
'ENGINE':'django.db.backends.mysql',
...
'OPTIONS': {'charset': 'utf8mb4'},
}
}
Opmerking:wanneer u uw database opnieuw aanmaakt, kunt u de 'Opgegeven sleutel was te lang tegenkomen ' kwestie.
De meest waarschijnlijke oorzaak is een CharField
die een max_length van 255 heeft en een soort index erop (bijvoorbeeld uniek). Omdat utf8mb4 33% meer ruimte gebruikt dan utf-8, moet u deze velden 33% kleiner maken.
Verander in dit geval de max_length van 255 in 191.
U kunt ook uw MySQL-configuratie bewerken om deze beperking te verwijderen maar niet zonder wat django-hackery
UPDATE: Ik kwam dit probleem net weer tegen en eindigde overschakelen naar PostgreSQL
omdat ik mijn VARCHAR
. niet kon verminderen tot 191 tekens.