Maison >base de données >tutoriel mysql >Comment corriger les erreurs « Valeur de chaîne incorrecte » lors de l'enregistrement d'Unicode dans Django et MySQL ?

Comment corriger les erreurs « Valeur de chaîne incorrecte » lors de l'enregistrement d'Unicode dans Django et MySQL ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-24 00:51:10511parcourir

How to Fix

Erreur de valeur de chaîne incorrecte lors de l'enregistrement de caractères Unicode dans MySQL avec Django

Lorsque vous essayez d'enregistrer des chaînes Unicode dans le modèle auth_user dans Django, vous peut rencontrer le message d'erreur suivant :

Incorrect string value: '\xC4\x8Dius' for column 'last_name' at row 104

Potentiel Causes

Cette erreur est généralement provoquée par les éléments suivants :

  • Limites du jeu de caractères : MySQL a une limite de 3 octets pour les caractères UTF-8 .
  • Paramètres de la base de données et de la table : La base de données, la table et les colonnes doivent utiliser le Jeu de caractères utf8mb4 pour prendre en charge les caractères Unicode de 4 octets.

Solution

Pour résoudre ce problème, suivez ces étapes :

  1. Modifiez la base de données, la table et les colonnes pour utiliser le caractère utf8mb4 set :

    • Exécutez la requête suivante pour créer une nouvelle base de données avec le jeu de caractères utf8mb4 :
    CREATE DATABASE db_name CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_general_ci';
    • Utilisez l'instruction ALTER TABLE pour modifier les tableaux existants et colonnes :
    ALTER TABLE auth_user CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
  2. Spécifiez le jeu de caractères dans les paramètres de Django :

    Dans le fichier de paramètres de Django (settings.py) , ajoutez la ligne suivante :

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

Supplémentaire Considérations

  • Si vous avez des colonnes CharField existantes avec une longueur maximale de 255 et un index dessus, vous devrez réduire la longueur maximale à 191 pour éviter le message "La clé spécifiée était trop longue " erreur.
  • Vous pouvez également modifier votre configuration MySQL pour supprimer la restriction de longueur de caractères. Cependant, cela nécessite des modifications supplémentaires de Django.
  • Si possible, envisagez de passer à PostgreSQL car il prend en charge jusqu'à 4 octets de caractères Unicode en UTF-8 sans ces restrictions.

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