Żadna z tych odpowiedzi nie rozwiązała problemu. Główną przyczyną jest:
Nie można przechowywać 4-bajtowych znaków w MySQL z zestawem znaków utf-8.
MySQL ma 3 bajtowy limit znaków utf-8 (tak, to kiepskie, ładnie podsumowane przez programistę Django )
Aby rozwiązać ten problem, musisz:
- Zmień bazę danych, tabelę i kolumny MySQL, aby korzystały z zestaw znaków utf8mb4 (dostępne tylko od MySQL 5.5 i nowszych)
- Określ zestaw znaków w pliku ustawień Django, jak poniżej:
settings.py
DATABASES = {
'default': {
'ENGINE':'django.db.backends.mysql',
...
'OPTIONS': {'charset': 'utf8mb4'},
}
}
Uwaga:podczas odtwarzania bazy danych możesz natrafić na „określony klucz był za długi ' wydanie.
Najbardziej prawdopodobną przyczyną jest CharField
który ma max_length 255 i jakiś rodzaj indeksu (np. unikalny). Ponieważ utf8mb4 zajmuje o 33% więcej miejsca niż utf-8, będziesz musiał zmniejszyć te pola o 33%.
W takim przypadku zmień max_length z 255 na 191.
Alternatywnie możesz edytować konfigurację MySQL, aby usunąć to ograniczenie ale nie bez trochę hackerów django
AKTUALIZACJA: Właśnie ponownie natknąłem się na ten problem i skończyłem przełączenie na PostgreSQL
ponieważ nie mogłem zmniejszyć mojego VARCHAR
do 191 znaków.