MySQL - Mélange illégal de classements (utf8_general_ci, COERCIBLE) et (latin1_swedish_ci, IMPLICIT) pour l'opération 'UNION'
Question
Comment corriger cette erreur une fois pour toutes? Je veux juste être capable de faire des unions en MySQL.
(Je cherche un raccourci, comme une option permettant à MySQL d'ignorer ce problème ou de le deviner, sans chercher à modifier les collations sur des centaines de tables ... du moins, pas aujourd'hui)
La solution
Vous n'êtes pas sûr de mySQL, mais dans MSSQL, vous pouvez modifier le classement dans la requête. Par exemple, si vous avez 2 tables avec un classement différent et que vous souhaitez les joindre ou si vous souhaitez créer UNION, vous pouvez le faire
.select column1 from tableWithProperCollation
union all
select column1 COLLATE SQL_Latin1_General_CP1_CI_AS from tableWithDifferentCollation
Bien entendu, SQL_Latin1_General_CP1_CI_AS n’est qu’un exemple de classement que vous souhaitez "convertir". à
Autres conseils
Merci Kristof. Dans ce cas, cela était dû à la sélection d'un littéral dans la première sélection, et non à partir de classements de table différents.
Ironiquement, je l’ai obtenu en suivant ces ancien article de blog que j'ai rédigé pour ce problème.
Une solution que j'ai trouvée qui semble être une solution facile consiste à modifier toute la base de données qui vous pose des problèmes. Je pense que ce n'est peut-être pas la meilleure façon de le faire, mais cela fonctionne pour moi et c'est facile. Je lance cette commande dans MySQL:
ALTER DATABASE databasename COLLATE utf8_unicode_ci;