Mysql
 sql >> Base de données >  >> RDS >> Mysql

Erreur de valeur de chaîne incorrecte MySQL lors de l'enregistrement de la chaîne Unicode dans Django

Aucune de ces réponses n'a résolu le problème pour moi. La cause principale étant :

Vous ne pouvez pas stocker de caractères à 4 octets dans MySQL avec le jeu de caractères utf-8.

MySQL a une limite 3 octets sur les caractères utf-8 (oui, c'est fou, bien résumé par un développeur Django ici )

Pour résoudre ce problème, vous devez :

  1. Modifiez votre base de données, votre table et vos colonnes MySQL pour utiliser jeu de caractères utf8mb4 (uniquement disponible à partir de MySQL 5.5)
  2. Spécifiez le jeu de caractères dans votre fichier de paramètres Django comme ci-dessous :

settings.py

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

Remarque :lors de la recréation de votre base de données, vous pouvez rencontrer la 'La clé spécifiée était trop longue ' publier.

La cause la plus probable est un CharField qui a un max_length de 255 et une sorte d'index dessus (par exemple unique). Étant donné que utf8mb4 utilise 33 % d'espace en plus que utf-8, vous devrez réduire ces champs de 33 %.

Dans ce cas, modifiez le max_length de 255 à 191.

Vous pouvez également modifier votre configuration MySQL pour supprimer cette restriction mais pas sans un peu de piratage Django

MISE À JOUR : Je viens de rencontrer à nouveau ce problème et j'ai fini par passer à PostgreSQL car je n'ai pas pu réduire mon VARCHAR à 191 caractères.