Nenhuma dessas respostas resolveu o problema para mim. A causa raiz sendo:
Você não pode armazenar caracteres de 4 bytes no MySQL com o conjunto de caracteres utf-8.
MySQL tem um limite de 3 bytes em caracteres utf-8 (sim, é maluco, bem resumido por um desenvolvedor do Django aqui )
Para resolver isso você precisa:
- Altere seu banco de dados MySQL, tabela e colunas para usar o conjunto de caracteres utf8mb4 (disponível apenas a partir do MySQL 5.5)
- Especifique o charset em seu arquivo de configurações do Django conforme abaixo:
configurações.py
DATABASES = {
'default': {
'ENGINE':'django.db.backends.mysql',
...
'OPTIONS': {'charset': 'utf8mb4'},
}
}
Nota:Ao recriar seu banco de dados, você pode encontrar o 'A chave especificada era muito longa ' questão.
A causa mais provável é um
CharField
que tem um max_length de 255 e algum tipo de índice nele (por exemplo, exclusivo). Como o utf8mb4 usa 33% mais espaço que o utf-8, você precisará tornar esses campos 33% menores. Nesse caso, altere o max_length de 255 para 191.
Como alternativa, você pode editar sua configuração do MySQL para remover essa restrição mas não sem alguns hackers django
ATUALIZAÇÃO: Acabei de me deparar com esse problema novamente e acabei mudar para PostgreSQL porque não consegui reduzir meu
VARCHAR
para 191 caracteres.