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

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

Susan Sarandon
Susan Sarandonoriginal
2024-11-27 08:48:14210parcourir

How to Fix MySQL's

Dépannage de l'erreur MySQL "Valeur de chaîne incorrecte" pour les chaînes Unicode dans Django

Lorsque vous essayez de stocker des chaînes Unicode dans MySQL à l'aide de Django, vous pouvez rencontrer un message d'erreur indiquant " Valeur de chaîne incorrecte." Ce problème survient en raison de la limitation de MySQL sur la taille des caractères Unicode dans le jeu de caractères utf-8.

Cause première

Le jeu de caractères utf-8 de MySQL prend en charge un maximum de 3 octets par caractère. Cependant, certains caractères Unicode nécessitent 4 octets ou plus. Lorsque de tels caractères sont enregistrés, MySQL génère l'erreur « Valeur de chaîne incorrecte ».

Solution

Pour résoudre ce problème, vous devez mettre en œuvre les étapes suivantes :

  1. Mettez à niveau MySQL vers la version 5.5 ou ultérieure : Les versions MySQL 5.5 et supérieures prennent en charge le jeu de caractères utf8mb4, qui peut gérer Caractères Unicode de 4 octets.
  2. Convertissez la base de données, la table et les colonnes en utf8mb4 : Modifiez votre base de données MySQL, vos tables et vos colonnes pour utiliser le jeu de caractères utf8mb4.
  3. Configurez Django pour utiliser utf8mb4 : Spécifiez l'option 'charset' dans Fichier settings.py de Django vers 'utf8mb4'.
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        ...
        'OPTIONS': {'charset': 'utf8mb4'},
    }
}

Considérations supplémentaires

  • Si vous rencontrez l'erreur « La clé spécifiée était trop longue » lors de la recréation de la base de données, réduisez la longueur maximale des CharFields avec des indices de 33%.
  • Vous pouvez également modifier votre configuration MySQL pour supprimer la longueur restriction. Cependant, cela nécessite des modifications supplémentaires de Django.

Compatibilité PostgreSQL

PostgreSQL prend en charge le stockage des caractères Unicode de 4 octets dans le jeu de caractères utf8, contrairement à MySQL. Par conséquent, vous pouvez passer à PostgreSQL comme option plus appropriée pour gérer les chaînes Unicode avec des longueurs de caractères plus longues.

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