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:
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:
|
<<: Vue implementiert das Senden von Emoticons im Chatfenster
>>: Lösung für Nginx-Installationsfehler
Vorwort Dieser Artikel stellt hauptsächlich den r...
1. Erstellen Sie ein Shell-Skript vim backupdb.sh...
Dieser Artikel zeichnet das Installationstutorial...
Vorwort PIPE, übersetzt als Pipeline. Angular Pip...
Inhaltsverzeichnis 1. Was ist der Lebenszyklus 2....
Wie unten dargestellt: def test_write(selbst): Fe...
Vorwort Kürzlich stieß ich bei der Arbeit auf ein...
Inhaltsverzeichnis 1. Funktionssignatur 2. Funkti...
1. Die Organisationsstruktur des Hypertext-Dokumen...
Vorwort Ich bin es gewohnt, Less/Sass zu schreibe...
Inhaltsverzeichnis 1. Erstellen Sie eine gespeich...
Dieser Artikel veranschaulicht anhand von Beispie...
Inhaltsverzeichnis 1. Was ist ein Proxy? 2. Wie w...
Langsame Protokollabfragefunktion Die Hauptfunkti...
Inhaltsverzeichnis Effektanzeige Code-Link Schlüs...