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 ?
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 :
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);
Ajouter COLLATE au OÙ clause :
WHERE users.username = rUsername COLLATE utf8_unicode_ci
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
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;
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!