Maison > base de données > tutoriel mysql > Comment résoudre le « mélange de classement illégal pour la comparaison d'égalité » dans les bases de données ?

Comment résoudre le « mélange de classement illégal pour la comparaison d'égalité » dans les bases de données ?

Linda Hamilton
Libérer: 2024-12-08 15:33:12
original
1052 Les gens l'ont consulté

How to Resolve

Mélange de classement illégal pour la comparaison de l'égalité : un guide complet

Lorsque vous travaillez avec des bases de données, il est crucial de garantir l'intégrité et la cohérence des données. Une erreur courante qui survient lors de l'exécution d'opérations sur des tables avec des classements différents est "Mélange illégal de classements". Cette erreur se produit lorsqu'une opération tente de comparer des valeurs dans des colonnes ou des champs ayant des paramètres de jeu de caractères ou de classement différents.

Comprendre les classements

Le classement définit les règles de comparaison et trier les données de caractères. Différents classements peuvent avoir un ordre des caractères et une sensibilité à la casse différents, conduisant à des résultats de comparaison inattendus. Par exemple, dans un jeu de caractères UTF-8, « Müller » peut être trié différemment selon que le classement est sensible à la casse ou insensible.

Message d'erreur :

Le message d'erreur « Mélange illégal de classements (utf8_unicode_ci,IMPLICIT) et (utf8_general_ci,IMPLICIT) pour l'opération '=' " indique que la tentative de comparaison de valeurs avec l'opérateur d'égalité (=) implique deux colonnes ou champs qui ont des classements différents : utf8_unicode_ci et utf8_general_ci.

Résolutions :

Pour résoudre cette erreur, il existe plusieurs options :

  1. Ajouter un classement explicitement :

    • Spécifiez explicitement le classement des variables d'entrée à l'aide du mot-clé COLLATE :

      SET @rUsername = 'aname' COLLATE utf8_unicode_ci;
      CALL updateProductUsers(@rUsername, @rProductID, @rPerm);
      Copier après la connexion
    • Ajouter COLLATE au OÙ clause :

      WHERE users.username = rUsername COLLATE utf8_unicode_ci
      Copier après la connexion
  2. Utiliser le classement correspondant dans la procédure stockée :

    • Modifier la procédure stockée pour spécifier le classement correct pour la définition du paramètre IN (si la version de MySQL est inférieure à 5.7) :

      CREATE PROCEDURE updateProductUsers(
      IN rUsername VARCHAR(24) COLLATE utf8_unicode_ci,
      IN rProductID INT UNSIGNED,
      IN rPerm VARCHAR(16))
      BEGIN
      ...
      END
      Copier après la connexion
  3. Convertir les tableaux en classement correspondant :

    • Modifier le tables de base de données pour utiliser un classement correspondant, évitant ainsi un classement futur incompatibilités :

      ALTER TABLE users CHARACTER SET utf8 COLLATE utf8_general_ci;
      Copier après la connexion

Meilleure pratique :

En règle générale, il est conseillé d'utiliser le même classement pour les tables impliquées dans les comparaisons. Cela garantit la cohérence et évite les erreurs potentielles liées au classement. Cependant, si différents classements sont nécessaires, une spécification explicite du classement devient essentielle.

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal