Maison >base de données >tutoriel mysql >Comment corriger l'erreur « Mélange illégal de classements » dans MySQL ?

Comment corriger l'erreur « Mélange illégal de classements » dans MySQL ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-05 00:50:02781parcourir

How to Fix the

Mélange illégal de classements dans MySQL : un guide détaillé de résolution

Lorsque vous travaillez sur une requête impliquant plusieurs tables, vous pouvez rencontrer l'erreur "Mélange illégal de classements." Ce problème survient lorsque les jeux de caractères et les classements utilisés dans les tables et les colonnes impliquées dans la requête ne correspondent pas.

Pour résoudre cette erreur, vous devez identifier les colonnes spécifiques à l'origine de la non-concordance et modifier leurs classements pour qu'ils correspondent. le reste des tableaux. Voici un guide étape par étape :

Identification des colonnes ne correspondant pas :

  1. Exécutez la requête suivante pour rechercher les colonnes avec des classements en conflit :
SELECT table_schema, table_name, column_name, character_set_name, collation_name
FROM information_schema.columns
WHERE collation_name = 'latin1_general_ci'
ORDER BY table_schema, table_name, ordinal_position;

Cette requête identifiera toutes les colonnes de votre base de données qui utilisent le classement 'latin1_general_ci'.

Conversion des classements :

Une fois que vous avez Si vous avez identifié les colonnes qui ne correspondent pas, vous pouvez convertir leurs classements pour qu'ils correspondent au reste des tables à l'aide de la commande ALTER TABLE. Par exemple, pour convertir la colonne « nom d'utilisateur » de la table « utilisateurs » en « latin1_swedish_ci », utilisez la commande suivante :

ALTER TABLE users CONVERT TO CHARACTER SET latin1 COLLATE 'latin1_swedish_ci';

Remarque : Le jeu de caractères et le classement du La colonne de clé primaire doit correspondre à celle de la colonne de clé étrangère dans les tables associées pour éviter les erreurs de classement.

Exemple de requête :

Voici une version révisée de votre requête d'origine avec le problème de classement résolu :

SELECT username, (SUM(rating)/COUNT(*)) as TheAverage, Count(*) as TheCount
FROM ratings WHERE month='Aug'
AND username IN (SELECT username FROM users WHERE gender=1)
GROUP BY username HAVING TheCount > 4
ORDER BY TheAverage DESC, TheCount DESC;

En suivant ces étapes, vous pouvez résoudre l'erreur « Mélange illégal de classements » et vous assurer que vos requêtes fonctionnent correctement avec des jeux de caractères et des classements cohérents.

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