MySQL - Mélange illégal de classements (utf8_general_ci, COERCIBLE) et (latin1_swedish_ci, IMPLICIT) pour l'opération 'UNION'

StackOverflow https://stackoverflow.com/questions/183446

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)

Était-ce utile?

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;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top