Mysql error: Illegal mix of collations for operation 'UNION'
Ich bin Boxonix!
Ich bin derzeit macht Sie ein Kommentar-Abschnitt auf meiner website und Im kleinen ein bisschen in Schwierigkeiten! Dieses "Illegal mix of collations for operation 'UNION'", erscheint, wenn ich diese Abfrage ausführen:
SELECT *
FROM comments
JOIN users ON comments.user_id = users.id
ORDER BY users.id DESC LIMIT $LIMIT1
UNION
SELECT *
FROM comments
JOIN videos ON comments.video_id = videos.id
Bin ich bereits irgendwie ein bisschen verwirrt, ich bin nicht mit Mysql, oft! Bitte um Hilfe!!
- Beim ausführen von select-Anweisungen auf die Gewerkschaften, zunächst müssen Sie explizit die Spalten, also die Spalten, die in jeder Abfrage übereinstimmen, zweitens ist es gut, hinzufügen, SORTIEREN, um die select-Anweisungen, damit Sie sich nicht immer gemischte Sortierungen. Beispiel: '(WÄHLEN Sie E-Mail-COLLATE utf8_general_ci email FROM users) UNION (SELECT E-Mail-COLLATE utf8_general_ci als E-Mail VON Abonnenten)'
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie erzwingen, dass die Sortierung in
SELECT
Teil der Abfrage. Zum Beispiel, wenn Spaltevideos.comment
istutf8_general_ci
undcomments.comment
istutf8_unicode_ci
können Sie erzwingen, dass es das gleiche sein:Aber dies hat eine begrenzte Nutzung im Falle, dass die Sortierungen können nicht übersetzt werden, genau so, wie Sie wollen.
Zu vermeiden "Illegal mix of collations for operation 'UNION'" Mysql-Fehler, den Sie müssen sicherstellen, dass gleiche-index-Spalten haben die gleiche Art von Sortierung oder Codierung.
Das problem ist, dass die beiden sub-Abfragen haben andere Spalte setzt.
Des ersten sub-Abfrage, geben Sie alle Spalten aus
comments
und alle Spalten aususers
. Die zweite sub-Abfrage, geben Sie alle Spalten auscomments
und alle Spalten ausvideos
. Es sei denn, die beiden Tabellenusers
undvideos
haben genau die gleiche Spalte, die Definitionen, dann dieUNION
ist nicht zur Arbeit gehen.Müssen Sie entscheiden, welche Spalten, die Sie benötigen, aus jeder Suchanfrage und passen jede
SELECT ...
so dass Sie übereinstimmen.Können Sie keine order by-Anweisung vor der union, Wenn Sie verwenden möchten, müssen Sie zuerst konvertieren Sie das Ergebnis als temporäre Tabelle. dann sage order by-Bedingung als unten
der wichtige Hinweis hier ist, dass die Anwender und die videos sollten die gleiche Zahl der Spalte Kommentare die Tabelle..Weil wenn Sie
union
oderunion all
sollten Sie gleich Nein. Spalten mit gleichen Daten geben..Wenn Kommentare,Benutzer,videos hat unterschiedliche Anzahl von Spalten dann nicht user-select * aus. stattdessen wählen Sie alle Spalten ausdrücklich als Folgen
Wenn die comments-Tabelle hat die Spalten user_id,col1,col2,col3 dann
Ersetzen
$LIMIT1
mit1
und führenORDER BY
nach der zweiten Abfrage.Versuchen Sie dies:Hinweis:Die union-operation erfordert, dass jede der beiden Abfragen haben genau die gleiche Anzahl von Spalten, die in Ihrer Ergebnismenge.