Žádná z těchto odpovědí pro mě problém nevyřešila. Hlavní příčinou je:
V MySQL nelze ukládat 4bajtové znaky se znakovou sadou utf-8.
MySQL má 3bajtový limit na znaky utf-8 (ano, je to šílené, pěkně shrnuto od vývojáře Django zde )
Chcete-li to vyřešit, musíte:
- Změňte databázi, tabulku a sloupce MySQL tak, aby používali znaková sada utf8mb4 (k dispozici pouze od MySQL 5.5 a novější)
- Uveďte znakovou sadu v souboru nastavení Django, jak je uvedeno níže:
settings.py
DATABASES = {
'default': {
'ENGINE':'django.db.backends.mysql',
...
'OPTIONS': {'charset': 'utf8mb4'},
}
}
Poznámka:Při opětovném vytváření databáze můžete narazit na 'Zadaný klíč byl příliš dlouhý ' problém.
Nejpravděpodobnější příčinou je CharField
který má max_length 255 a na něm nějaký druh indexu (např. jedinečný). Protože utf8mb4 využívá o 33 % více prostoru než utf-8, budete muset tato pole zmenšit o 33 %.
V tomto případě změňte max_length z 255 na 191.
Případně můžete upravit konfiguraci MySQL a toto omezení odstranit ale ne bez django hackery
AKTUALIZACE: Právě jsem znovu narazil na tento problém a skončil jsem přechodem na PostgreSQL
protože jsem nebyl schopen snížit svůj VARCHAR
až 191 znaků.