Habe gerade diese Antwort aus einer vorherigen Frage erhalten und es ist ein Vergnügen!
SELECT username, (SUM(rating)/COUNT(*)) as TheAverage, Count(*) as TheCount
FROM ratings WHERE month='Aug' GROUP BY username HAVING TheCount > 4
ORDER BY TheAverage DESC, TheCount DESC
Aber wenn ich dieses zusätzliche Bit stecke, wird dieser Fehler angezeigt:
Dokumentation # 1267 - Ungültige Mischung aus Kollatierungen (latin1_swedish_ci, IMPLICIT) und (latin1_general_ci, IMPLICIT) für Operation '='
SELECT username, (SUM(rating)/COUNT(*)) as TheAverage, Count(*) as TheCount FROM
ratings WHERE month='Aug'
**AND username IN (SELECT username FROM users WHERE gender =1)**
GROUP BY username HAVING TheCount > 4 ORDER BY TheAverage DESC, TheCount DESC
Die Tabelle ist:
id, username, rating, month
Überprüfen Sie den Sortierungstyp jeder Tabelle und stellen Sie sicher, dass sie die gleiche Sortierung haben.
Überprüfen Sie anschließend auch den Sortierungstyp jedes Tabellenfelds, das Sie in Betrieb haben.
Ich war auf den gleichen Fehler gestoßen, und diese Tricks funktionieren bei mir.
So prüfen Sie, welche Spalten die falsche Sortierung sind:
SELECT table_schema, table_name, column_name, character_set_name, collation_name
FROM information_schema.columns
WHERE collation_name = 'latin1_general_ci'
ORDER BY table_schema, table_name,ordinal_position;
Und hier ist die Abfrage, um das Problem zu beheben:
ALTER TABLE tbl_name CONVERT TO CHARACTER SET latin1 COLLATE 'latin1_swedish_ci';
[MySQL]
In diesen (sehr seltenen) Fällen:
werte, die nicht aus einer Tabelle stammen, sondern aus einer expliziten Aufzählung stammen, z.
SELECT 1 AS-Nummern UNION ALL SELECT 2 UNION ALL SELECT 3
sie können die Werte zwischen den verschiedenen Tabellen mit CAST oder CONVERT vergleichen:
CAST('my text' AS CHAR CHARACTER SET utf8)
CONVERT('my text' USING utf8)
Siehe CONVERT und CAST-Dokumentation auf der MySQL-Website.
Ich habe bei PhpMyadmin den gleichen Fehler erhalten und die hier angegebene Lösung für mich gefunden
ALTER TABLE table CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci
Unzulässige Mischung von Sortierungen MySQL-Fehler Außerdem würde ich empfehlen, mit General anstelle von Schwedisch zu gehen, da diese Standardeinstellung ist und die Sprache nicht verwendet wird, es sei denn, Ihre Anwendung verwendet Schwedisch.
alter table users convert to character set latin1 collate latin1_swedish_ci;
Ich habe diesen Fehler in einer gespeicherten Prozedur in der where-Klausel erhalten. Ich entdeckte, dass das Problem bei einer lokal deklarierten Variablen auftrat, die zuvor von derselben Tabelle/Spalte geladen wurde.
Ich habe es aufgelöst und die Daten in einen einzelnen Zeichentyp umgewandelt.
Das Problem hier hauptsächlich, Cast das Feld wie dieser Cast (Feld als Varchar) oder Cast (Felder als Datum)
Ich denke, du solltest zu utf8 konvertieren
--set utf8 for connection
SET collation_connection = 'utf8_general_ci'
--change CHARACTER SET of DB to utf8
ALTER DATABASE dbName CHARACTER SET utf8 COLLATE utf8_general_ci
--change CHARACTER SET of table to utf8
ALTER TABLE tableName CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci
Kurz gesagt, dieser Fehler wird dadurch verursacht, dass MySQL versucht, eine Operation mit zwei Dingen durchzuführen, die unterschiedliche Sortierungseinstellungen haben. Wenn Sie die Einstellungen anpassen, wird der Fehler behoben. Natürlich müssen Sie die richtige Einstellung für Ihre Datenbank auswählen, je nachdem, wofür sie verwendet wird.
Hier ein paar gute Ratschläge zur Wahl zwischen zwei sehr häufigen utf8-Kollatierungen: Was ist der Unterschied zwischen utf8_general_ci und utf8_unicode_ci
Wenn Sie phpMyAdmin verwenden, können Sie dies systematisch tun, indem Sie die in Ihrer Fehlermeldung genannten Tabellen durcharbeiten und den Sortierungstyp für jede Spalte überprüfen. Zuerst sollten Sie überprüfen, welche allgemeine Einstellung für die Kollatierung für Ihre Datenbank festgelegt ist. PhpMyAdmin kann Ihnen dies mitteilen und gegebenenfalls ändern. Jede Spalte in jeder Tabelle kann jedoch ihre eigene Einstellung haben. Normalerweise möchten Sie, dass alle übereinstimmen.
In einer kleinen Datenbank ist dies leicht genug von Hand auszuführen. Wenn Sie die Fehlermeldung vollständig lesen, werden Sie in der Regel an den richtigen Ort geleitet. Vergessen Sie nicht, auch die "Struktur" -Einstellungen für Spalten mit Untertabellen zu betrachten. Wenn Sie eine Kollatierung finden, die nicht übereinstimmt, können Sie sie mit phpMyAdmin direkt ändern. Das Abfragefenster muss nicht verwendet werden. Dann versuchen Sie es erneut. Bleibt der Fehler bestehen, schauen Sie weiter!
Sie müssen jede Spalte Sortierung von latin1_general_ci in latin1_swedish_ci ändern
Ich habe auch den gleichen Fehler erhalten, aber in meinem Fall lag das Hauptproblem in der Bedingung wo. Der Parameter, den ich überprüfe, hatte ein unbekanntes verstecktes Zeichen (+% A0).
Wenn A0 convert 160 bekam, aber 160 außerhalb des Bereichs des Zeichens war, das von db erkannt wird, kann die Datenbank es nicht als Zeichen erkennen
die Lösung, die ich gemacht habe, war, dass ich einige dieser Zeichen überprüft habe und diese entfernt, bevor der SQL-Befehl ausgeführt wird
ex: - preg_replace ('/\D /', '', $ myParameter);
Verwenden Sie ascii_bin, wo immer dies möglich ist, es wird mit fast jeder Sortierung verglichen. Ein Benutzername akzeptiert ohnehin selten Sonderzeichen.
Ich habe dasselbe Problem mit der Sammlungswarnung für ein Feld, das von 0 auf 1 gesetzt ist. Alle Spaltensammlungen waren gleich. Wir versuchen erneut, die Sammlungen zu ändern, aber dieses Problem wird durch nichts behoben.
Am Ende aktualisieren wir das Feld auf NULL
und danach aktualisieren wir auf 1 und das Sammlungsproblem wird dadurch behoben.
SELECT username, AVG(rating) as TheAverage, COUNT(*) as TheCount
FROM ratings
WHERE month='Aug'
AND username COLLATE latin1_general_ci IN
(
SELECT username
FROM users
WHERE gender = 1
)
GROUP BY
username
HAVING
TheCount > 4
ORDER BY
TheAverage DESC, TheCount DESC;
Sie müssen 'utf8' für alle Parameter in jeder Funktion einstellen. Es ist mein Fall:
Wenn Sie vermeiden möchten, die Syntax zu ändern, um dieses Problem zu lösen, versuchen Sie Folgendes:
Aktualisieren Sie Ihr MySQL auf Version 5.5 oder höher.
Dies hat das Problem für mich gelöst.