Looking for mysql Keywords? Try Ask4Keywords

MySQLFehler 1055: ONLY_FULL_GROUP_BY: etwas ist nicht in der GROUP BY-Klausel enthalten ...


Einführung

Vor kurzem haben neue Versionen von MySQL-Servern begonnen, 1055-Fehler für Abfragen zu generieren, die früher funktionierten. In diesem Thema werden diese Fehler erläutert. Das MySQL-Team hat daran gearbeitet, die nicht standardmäßige Erweiterung von GROUP BY , oder es zumindest zu erschweren, dass Entwickler von Abfrageschreiben davon gebrannt werden.

Bemerkungen

MySQL enthält seit langem eine notorische, nicht standardmäßige Erweiterung für GROUP BY , die ein seltsames Verhalten im Namen der Effizienz ermöglicht. Diese Erweiterung hat es unzähligen Entwicklern auf der ganzen Welt ermöglicht, GROUP BY im Produktionscode zu verwenden, ohne vollständig zu verstehen, was sie tun.

Es ist insbesondere nicht SELECT * , SELECT * in einer GROUP BY Abfrage zu verwenden, da eine Standard- GROUP BY Klausel das Auflisten der Spalten erfordert. Viele Entwickler haben das leider getan.

Lesen Sie dies. https://dev.mysql.com/doc/refman/5.7/de/group-by-handling.html

Das MySQL-Team hat versucht, dieses Missverständnis zu beheben, ohne den Produktionscode zu beeinträchtigen. In sql_mode ein sql_mode Flag mit dem Namen ONLY_FULL_GROUP_BY , um das Standardverhalten zu erzwingen. In einer kürzlich veröffentlichten Version wurde das Flag standardmäßig aktiviert. Wenn Sie Ihr lokales MySQL auf 5.7.14 aktualisiert haben, wurde das Flag aktiviert und Ihr Produktionscode, abhängig von der alten Erweiterung, funktioniert nicht mehr.

Wenn Sie vor kurzem begonnen haben, 1055 Fehler zu erhalten, welche Entscheidungen treffen Sie?

  1. Korrigieren Sie die fehlerhaften SQL-Abfragen, oder fordern Sie die Autoren dazu auf.
  2. Führen Sie mit der von Ihnen verwendeten Anwendungssoftware eine Version von MySQL-kompatibel aus
  3. Ändern Sie den sql_mode Ihres Servers, um den neu eingestellten ONLY_FULL_GROUP_BY Modus zu ONLY_FULL_GROUP_BY .

Sie können den Modus durch einen SET Befehl ändern.

SET  sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

Sie sollten den Trick ausführen, wenn Sie es tun, nachdem Ihre Anwendung eine Verbindung zu MySQL hergestellt hat.

Sie können die init-Datei auch in Ihrer MySQL-Installation finden, die sql_mode= und in ONLY_FULL_GROUP_BY auslassen und den Server neu starten.

Fehler 1055: ONLY_FULL_GROUP_BY: etwas ist nicht in der GROUP BY-Klausel enthalten ... Verwandte Beispiele