Dépannage de l'erreur « Mélange illégal de classements » de MySQL
Des ensembles de données volumineux peuvent parfois déclencher l'erreur frustrante de MySQL « Mélange illégal de classements ». Cela se produit lors de la comparaison de données avec des jeux de caractères et des classements incohérents.
Le problème
Considérez cette requête :
<code class="language-sql">SELECT COUNT(*) AS num FROM keywords WHERE campaignId = '12' AND LCASE(keyword) = 'hello again 昔 ã‹ã‚‰ ã‚ã‚‹ å ´æ‰€'</code>
L'exécution de ceci pourrait produire :
<code>Error Number: 1267 Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='</code>
Solutions : échappement de chaîne ou modifications d'encodage
Il existe deux approches principales pour résoudre ce problème : échapper à la chaîne problématique ou modifier les encodages de la base de données et des tables.
Méthode 1 : échappement de chaîne (correctif temporaire)
Échapper à la chaîne peut temporairement éviter l'erreur :
<code class="language-sql">SET collation_connection = 'utf8_general_ci'; SELECT COUNT(*) AS num FROM keywords WHERE campaignId = '12' AND LCASE(keyword) = 'hello again \"昔 ã‹ã‚‰ ã‚ã‚‹ å ´æ‰€\"'</code>
Cependant, il s'agit d'une solution de fortune qui pourrait créer des problèmes futurs.
Méthode 2 : modification des encodages de base de données et de table (solution permanente)
Pour un correctif permanent, standardisez votre base de données et vos tables à utiliser utf8_general_ci
:
<code class="language-sql">ALTER DATABASE your_database_name CHARACTER SET utf8 COLLATE utf8_general_ci; ALTER TABLE your_table_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;</code>
En unifiant votre classement de connexion et vos encodages de base de données/table sur utf8_general_ci
, vous garantissez une gestion cohérente des données et éliminez l'incompatibilité de classement. C'est l'approche recommandée.
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!