sql >> Base de Datos >  >> RDS >> Mysql

Error de valor de cadena incorrecto de MySQL al guardar una cadena Unicode en Django

Ninguna de estas respuestas resolvió el problema para mí. La causa raíz es:

No puede almacenar caracteres de 4 bytes en MySQL con el conjunto de caracteres utf-8.

MySQL tiene un límite de 3 bytes en caracteres utf-8 (sí, es una locura, muy bien resumido por un desarrollador de Django aquí )

Para solucionar esto necesitas:

  1. Cambie su base de datos MySQL, tablas y columnas para usar el conjunto de caracteres utf8mb4 (solo disponible desde MySQL 5.5 en adelante)
  2. Especifique el juego de caracteres en su archivo de configuración de Django como se muestra a continuación:

configuraciones.py

DATABASES = {
    'default': {
        'ENGINE':'django.db.backends.mysql',
        ...
        'OPTIONS': {'charset': 'utf8mb4'},
    }
}

Nota:Al recrear su base de datos, puede encontrarse con la 'La clave especificada era demasiado larga ' tema.

La causa más probable es un CharField que tiene una longitud máxima de 255 y algún tipo de índice (por ejemplo, único). Debido a que utf8mb4 usa un 33 % más de espacio que utf-8, necesitará hacer que estos campos sean un 33 % más pequeños.

En este caso, cambie max_length de 255 a 191.

Alternativamente, puede editar su configuración de MySQL para eliminar esta restricción pero no sin algunos trucos de django

ACTUALIZACIÓN: Me encontré con este problema nuevamente y terminé cambiando a PostgreSQL porque no pude reducir mi VARCHAR hasta 191 caracteres.