Maison >base de données >tutoriel mysql >Comment corriger l'erreur « Valeur de chaîne incorrecte » lors de l'enregistrement de chaînes Unicode dans Django ?

Comment corriger l'erreur « Valeur de chaîne incorrecte » lors de l'enregistrement de chaînes Unicode dans Django ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-02 00:38:13122parcourir

How to Fix the

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

Lorsque vous essayez d'enregistrer des chaînes Unicode dans le modèle auth_user de Django, vous pouvez rencontrer un message " erreur de valeur de chaîne incorrecte". Cette erreur est généralement provoquée par les paramètres de jeu de caractères et de classement MySQL.

Jeu de caractères et classement MySQL

MySQL prend en charge le jeu de caractères UTF-8, mais il a un Limite de 3 octets sur les caractères. Cela signifie qu'il n'est pas possible de stocker des caractères Unicode de 4 octets dans MySQL avec le jeu de caractères UTF-8 standard.

Explication du problème

Lorsque Django tente de sauvegarder chaînes Unicode au modèle auth_user, MySQL essaie de les convertir au jeu de caractères UTF-8. Cependant, si les chaînes contiennent des caractères de 4 octets, la conversion échoue et entraîne l'erreur « valeur de chaîne incorrecte ».

Solution

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

  1. Changer le jeu de caractères MySQL en utf8mb4 : MySQL 5.5 et versions ultérieures prend en charge le jeu de caractères utf8mb4, qui autorise les caractères de 4 octets. Recréez votre base de données, vos tables et vos colonnes à l'aide de utf8mb4.
  2. Spécifiez le jeu de caractères dans les paramètres Django : Ajoutez ce qui suit à votre fichier de paramètres Django (settings.py) pour spécifier le jeu de caractères pour le connexion à la base de données :
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        ...
        'OPTIONS': {'charset': 'utf8mb4'},
    }
}

Supplémentaire Considérations

  • Si vous ne parvenez pas à réduire la taille de votre champ VARCHAR à 191 caractères, vous pouvez envisager de passer à PostgreSQL, qui prend en charge les caractères Unicode de 4 octets par défaut.
  • Si vous souhaitez continuer à utiliser MySQL avec utf8mb4, vous devrez peut-être appliquer des hacks à Django pour augmenter le VARCHAR autorisé. size.
  • Dans de rares cas, ce problème peut également être causé par une configuration de base de données qui limite la taille des clés. Vérifiez votre configuration MySQL et ajustez-la si nécessaire.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn