Ingen af disse svar løste problemet for mig. Grundårsagen er:
Du kan ikke gemme 4-byte-tegn i MySQL med utf-8-tegnsættet.
MySQL har en 3 byte-grænse på utf-8 tegn (ja, det er vildt, pænt opsummeret af en Django-udvikler her )
For at løse dette skal du:
- Skift din MySQL-database, tabel og kolonner for at bruge utf8mb4 tegnsæt (kun tilgængelig fra MySQL 5.5 og frem)
- Angiv tegnsættet i din Django-indstillingsfil som nedenfor:
settings.py
DATABASES = {
'default': {
'ENGINE':'django.db.backends.mysql',
...
'OPTIONS': {'charset': 'utf8mb4'},
}
}
Bemærk:Når du genskaber din database, kan du løbe ind i 'den angivne nøgle var for lang ' problem.
Den mest sandsynlige årsag er et CharField
som har en max_length på 255 og en form for indeks på den (f.eks. unik). Fordi utf8mb4 bruger 33 % mere plads end utf-8, bliver du nødt til at gøre disse felter 33 % mindre.
I dette tilfælde skal du ændre max_length fra 255 til 191.
Alternativt kan du redigere din MySQL-konfiguration for at fjerne denne begrænsning men ikke uden noget django-hackeri
OPDATERING: Jeg stødte lige ind i dette problem igen og endte med at skifte til PostgreSQL
fordi jeg ikke var i stand til at reducere min VARCHAR
til 191 tegn.