Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Erro de valor de string incorreto do MySQL ao salvar string unicode no Django


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:
  1. 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)
  2. 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.