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

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

DDD
DDDoriginal
2024-12-15 10:54:12674parcourir

How to Fix

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

Lors de la tentative d'enregistrement de chaînes Unicode dans le modèle auth_user de Django, une "valeur de chaîne incorrecte " Une erreur peut survenir. En effet, MySQL a une limite de 3 octets pour les caractères utf-8, alors que certains caractères Unicode nécessitent 4 octets.

Cause première :

L'erreur se produit car MySQL ne peut pas stocker certains caractères Unicode à cause de son octet limitations.

Solution :

Pour résoudre ce problème :

  1. Utilisez le jeu de caractères utf8mb4 : Mettez à niveau MySQL vers version 5.5 ou ultérieure, puis modifiez votre base de données, votre table et vos colonnes pour utiliser le caractère utf8mb4 set.
  2. Spécifier le jeu de caractères dans Django : Dans votre fichier de paramètres Django, ajoutez l'option suivante pour spécifier le jeu de caractères utf8mb4 :
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        ...
        'OPTIONS': {'charset': 'utf8mb4'},
    }
}
  1. Réduire la longueur du champ de caractères : Si vous rencontrez le problème « La clé spécifiée était trop longue », réduisez la max_length de CharFields avec des index d'environ 33 %. Par exemple, passez de 255 à 191.

Alternatives :

  • Passer à PostgreSQL : PostgreSQL prend en charge 4 octets Caractères Unicode sans limitations.
  • Modifier MySQL Configuration : Modifiez la configuration MySQL pour supprimer la restriction d'octets, mais notez que cela peut nécessiter des modifications supplémentaires de Django.

Il est important de noter qu'en passant à utf8mb4, vous devrez être conscient de problèmes de compatibilité potentiels avec les anciennes versions de MySQL ou d'autres applications qui peuvent ne pas prendre en charge la limite de 4 octets.

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