Lösung für den ONLY_FULL_GROUP_BY-Fehler in Mysql5.7 und höher

Lösung für den ONLY_FULL_GROUP_BY-Fehler in Mysql5.7 und höher

Während des jüngsten Entwicklungsprozesses handelte es sich bei der mit der Projektentwicklungsumgebung verbundenen MySQL-Datenbank um die Datenbank von Alibaba Cloud, und die Datenbankversion von Alibaba Cloud ist 5.6. Das MySQL in der Testumgebung ist 5.7 und wurde von mir selbst installiert. Daher haben einige Freunde während des Entwicklungsprozesses versehentlich die SQL-Anweisung geschrieben, die sich auf „Gruppieren nach“ bezieht. In der Entwicklungsumgebung läuft es normal, in der Testumgebung werden jedoch Anomalien festgestellt.

Ursachenanalyse: Die MySQL-Version 5.7 setzt standardmäßig das Attribut mysql sql_mode = only_full_group_by, was einen Fehler verursacht.

Unter ihnen ist ONLY_FULL_GROUP_BY der Schuldige für diesen Fehler. Wenn bei der Group-by-Aggregationsoperation die Spalte in der Auswahl nicht in der Group-by-Klausel erscheint, ist das SQL ungültig, da die Spalte nicht in der Group-by-Klausel enthalten ist. Daher meldet die Datenbank mit gesetztem sql_mode=only_full_group_by einen Fehler, wenn Group-by verwendet wird.

Die Testumgebung hat die neueste Version von MySQL 5.7.x heruntergeladen und installiert. Der Modus only_full_group_by war standardmäßig aktiviert. Nach der Aktivierung dieses Modus meldete die ursprüngliche group_by-Anweisung jedoch einen Fehler und wurde daraufhin entfernt.

Sobald only_full_group_by aktiviert ist, fühlt es sich so an, als ob group by dasselbe wie distinct wird, das nur die davon betroffenen Feldinformationen abrufen kann und nicht mit anderen, nicht davon betroffenen Feldern koexistieren kann. Auf diese Weise wird die Funktion von group by sehr eingeschränkt.

Es ist besser, den Modus only_full_group_by zu aktivieren. Denn in MySQL gibt es eine Funktion: any_value(field) ermöglicht die Darstellung von nicht gruppierenden Feldern (was den gleichen Effekt hat wie das Deaktivieren des only_full_group_by-Modus).

1. Überprüfen Sie sql_mode

Wählen Sie @@sql_mode;

Der abgefragte Wert ist:

NUR_VOLLSTÄNDIGE_GRUPPE_NUR, STRENGE_TRANS_TABELLEN, KEINE_NULL_IM_DATUM, KEIN_NULL_DATUM, FEHLER_FÜR_DIVISION_DURCH_NULL, KEIN_AUTOMATISCHES_ERSTELLEN_BENUTZER, KEIN_ENGINE_SUBSTITUTION

2. Entfernen Sie ONLY_FULL_GROUP_BY und setzen Sie den Wert zurück.

SETZEN Sie @@global.sql_mode = 'STRICT_TRANS_TABLES,KEINE_NULL_IM_DATUM,KEINE_NULL_DATUM,FEHLER_FÜR_DIVISION_DURCH_NULL,KEIN_AUTO_CREATE_USER,KEINE_ENGINE_SUBSTITUTION';

3. Das oben genannte ändert den globalen SQL-Modus, der für neu erstellte Datenbanken gültig ist. Für eine bestehende Datenbank müssen Sie es unter den entsprechenden Daten ausführen

SETZEN Sie den SQL-Modus = 'STRICT_TRANS_TABLES, KEINE_NULL_IM_DATUM, KEIN_NULL_DATUM, FEHLER BEI_DIVISION_DURCH_NULL, KEIN_AUTO_CREATE_USER, KEINE_ENGINE_SUBSTITUTION';

Die obige Methode ist nach dem Neustart der MySQL-Datenbank immer noch ungültig. Die folgende Methode ist nach dem Neustart immer noch wirksam

Suchen Sie die MySQL-Konfigurationsdatei /etc/my.cnf auf dem Linux-System und fragen Sie das Feld sql_mode ab. Ich konnte dieses Schlüsselwort in der Konfigurationsdatei nicht finden und habe es daher manuell hinzugefügt:

sql_mode = STRICT_TRANS_TABLES,KEINE_NULL_IM_DATUM,KEINE_NULL_DATUM,FEHLER_FÜR_DIVISION_DURCH_NULL,KEIN_AUTO_CREATE_USER,KEINE_ENGINE_SUBSTITUTION

Zu beachten ist, dass es in der [mysqld]-Konfiguration hinzugefügt werden muss, damit es nach einem Neustart von mysql wirksam wird. Beenden Sie die Datenbank: exit, restart-Befehl:

Dienst MySQL Neustart

Aktualisieren Sie die Seite und die Fehlermeldung verschwindet. Das Problem wurde erfolgreich gelöst. Stellen Sie erneut eine Verbindung zur Datenbank her, um die SQL_Mode-Konfiguration anzuzeigen. Wählen Sie @@sql_mode:

STRICT_TRANS_TABLES,KEINE_NULL_IM_DATUM,KEIN_NULL_DATUM,FEHLER_FÜR_DIVISION_DURCH_NULL,KEIN_AUTO_CREATE_USER,KEINE_ENGINE_SUBSTITUTION

Dies ist das Ende dieses Artikels über die Lösung des ONLY_FULL_GROUP_BY-Fehlers in Mysql5.7 und höher. Weitere verwandte Mysql5.7 ONLY_FULL_GROUP_BY-Inhalte finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder durchsuchen Sie die verwandten Artikel weiter unten. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Grafisches Tutorial zur Installation und Konfiguration der MySQL-Version 8.0.24
  • Einige Verbesserungen in MySQL 8.0.24 Release Note
  • Implementierung der MVCC-Mehrversions-Parallelitätskontrolle von MySQL
  • Die beste Lösung zum Zurücksetzen des Root-Passworts von MySQL 8.0.23
  • Informationen zum Konfigurationsproblem bei der Verbindung von MyBatis mit der MySql8.0-Version
  • So lösen Sie das Problem, dass Seata die MySQL 8-Version nicht verwenden kann
  • Detaillierte Erklärung der Verbindung von DBeaver zu MySQL Version 8 und höher und Lösung möglicher Probleme
  • Bei der Verwendung von mybatis-generator mit mysql8.0.3 in IDEA sind Fehler aufgetreten
  • Lösung für das Problem des verstümmelten Codes in MySQL 5.x
  • Detailliertes Tutorial zur Installation der MySQL 8.0.20-Datenbank auf CentOS 7
  • Lösen Sie das Installationsproblem der mysql8.0.19 Winx64-Version
  • Kompatibilitätsprobleme mit Django 2.2 und PyMySQL
  • Schritte zur Installation von MySQL 5.7 im Binärmodus und zur Optimierung des Systems unter Linux
  • Installation verschiedener Versionen von MySQL 8.0.18 und während der Installation aufgetretene Probleme (Zusammenfassung)
  • Sehr detaillierte Anleitung zum Upgrade der MySQL-Version

<<:  Vue implementiert das Senden von Emoticons im Chatfenster

>>:  Lösung für Nginx-Installationsfehler

Artikel empfehlen

So verwenden Sie das Vue-Router-Routing

Inhaltsverzeichnis 1. Beschreibung 2. Installatio...

MySQL 5.7.21 Installations- und Konfigurations-Tutorial unter Windows 10

Dieser Artikel zeichnet die Installations- und Ko...

Detaillierte Erläuterung der Angular-Datenbindung und ihrer Implementierung

Inhaltsverzeichnis Vorwort Was ist Datenbindung? ...

CSS zur Erzielung einer kompatiblen Textausrichtung in verschiedenen Browsern

Beim Front-End-Layout des Formulars müssen wir hä...

js implementiert Axios Limit-Anforderungswarteschlange

Inhaltsverzeichnis Der Hintergrund ist: Was wird ...

So entwickeln Sie Java 8 Spring Boot-Anwendungen in Docker

In diesem Artikel zeige ich Ihnen, wie Sie mit Ja...

jQuery Canvas zeichnet Bildüberprüfungscodebeispiel

In diesem Artikelbeispiel wird der spezifische Co...

So betreiben Sie eine MySql-Datenbank mit Gorm

1. Festlegen der Groß-/Kleinschreibung von Felder...

React implementiert den Beispielcode der Radiokomponente

Ziel dieses Artikels ist es, die Grundfunktionen ...

Natives JavaScript zum Erzielen von Folieneffekten

Wenn wir eine Seite erstellen, insbesondere eine ...

So erstellen Sie ein Drag & Drop-Plugin mit benutzerdefinierten Vue-Direktiven

Wir alle kennen die Drag-and-Drop-Funktion von HT...