Maison >base de données >tutoriel mysql >Comment résoudre l'erreur de mélange illégal de classements de MySQL (latin1_swedish_ci et utf8_general_ci) ?

Comment résoudre l'erreur de mélange illégal de classements de MySQL (latin1_swedish_ci et utf8_general_ci) ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-10 19:51:43485parcourir

How to Solve MySQL's Illegal Mix of Collations Error (latin1_swedish_ci and utf8_general_ci)?

Détails et solutions des erreurs de conflit de jeu de caractères MySQL

Lors du traitement de grandes quantités de données, vous pouvez rencontrer l'erreur suivante dans MySQL :

<code>错误号:1267

操作“=”的字符集校对(latin1_swedish_ci,隐式)和(utf8_general_ci,可强制)不匹配</code>

Cette erreur se produit lorsque MySQL tente de comparer des données avec différents classements de jeux de caractères, ce qui entraîne une incompatibilité. Dans ce cas, l'erreur se produit lors d'une requête qui compare la colonne « mot-clé » (en supposant un classement avec « latin1_swedish_ci ») à une chaîne littérale qui peut être collationnée avec « utf8_general_ci ».

Résoudre les conflits de jeux de caractères

Pour corriger cette erreur, vous pouvez essayer plusieurs choses :

  1. Définir le classement de connexion : Exécutez la requête suivante pour définir le classement de connexion sur "utf8_general_ci" :
<code>SET collation_connection = 'utf8_general_ci';</code>
  1. Modifier les encodages des bases de données et des tables : Convertir les jeux de caractères et les classements des bases de données et des tables concernées :
<code>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>
  1. Chaînes d'échappement : Dans certains cas, vous pouvez essayer d'échapper une chaîne littérale pour vous assurer qu'elle utilise le classement approprié. Par exemple, vous pouvez essayer de mettre la chaîne entre guillemets simples (') ou doubles (") pour forcer le classement par concaténation.

Autres notes

MySQL introduit parfois le classement "latin1_swedish_ci" sans raison apparente. Pour éviter ce problème à l'avenir, définissez explicitement des jeux de caractères et des classements pour tous les objets de base de données, y compris les tables, les colonnes et les procédures stockées. Vous pouvez éviter que de telles erreurs ne se produisent en vous assurant que toutes les données sont rassemblées de manière cohérente.

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