876 Stimmen

Deaktiviere NUR_FULL_GROUP_BY

Ich habe versehentlich den ONLY_FULL_GROUP_BY-Modus aktiviert, wie hier:

SET sql_mode = 'ONLY_FULL_GROUP_BY';

Wie kann ich ihn deaktivieren?

117voto

Tripp Kinetics Punkte 5029

Probieren Sie Folgendes aus:

SET sql_mode = ''

Gemeinschaftshinweis: Wie in den Antworten unten erwähnt, werden damit tatsächlich alle aktuell aktivierten SQL-Modi gelöscht. Das ist möglicherweise nicht unbedingt das, was Sie wollen.

61voto

Waqleh Punkte 9052

Ich habe festgestellt, dass @Eyo Okon Eyo-Lösung funktioniert, solange der MySQL-Server nicht neu gestartet wird, dann werden die Standardeinstellungen wiederhergestellt. Hier ist eine dauerhafte Lösung, die bei mir funktioniert hat:

Um einen bestimmten SQL-Modus zu entfernen (in diesem Fall ONLY_FULL_GROUP_BY), finden Sie den aktuellen SQL-Modus:

SELECT @@GLOBAL.sql_mode;

Kopieren Sie das Ergebnis und entfernen Sie davon, was Sie nicht benötigen (ONLY_FULL_GROUP_BY)

zum Beispiel:

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

bis

STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

erstellen und öffnen Sie diese Datei:

/etc/mysql/conf.d/disable_strict_mode.cnf

und schreiben Sie in sie Ihren neuen SQL-Modus:

[mysqld]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

Starten Sie MySQL neu:

sudo service mysql restart

Oder Sie können ANY_VALUE() verwenden, um die Ablehnung des ONLY_FULL_GROUP_BY-Werts zu unterdrücken, Sie können hier mehr darüber lesen

54voto

Arvid Punkte 983

Danke @cwhisperer. Ich hatte das gleiche Problem mit Doctrine in einer Symfony-App. Ich habe einfach die Option zu meiner config.yml hinzugefügt:

doctrine:
    dbal:
        driver:   pdo_mysql
        options:
            # PDO::MYSQL_ATTR_INIT_COMMAND
            1002: "SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''))"

Dies hat bei mir gut funktioniert.

46voto

Jadeye Punkte 2745

Am:

  • Ubuntu 14.04
  • mysql Ver 14.14 Distrib 5.7.16, für Linux (x86_64) mit EditLine-Wrapper

Tun:

$ sudo nano /etc/mysql/conf.d/mysql.cnf

Kopieren und einfügen:

[mysqld]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

Am Ende der Datei einfügen

$ sudo service mysql restart

29voto

br3nt Punkte 7860

Die MySQL-Dokumentation gibt auch die folgenden Methoden an:

  • Legen Sie sql-mode="" in einer Optiondatei wie z. B. my.cnf (Unix-Betriebssysteme) oder my.ini (Windows) fest.
  • Um den SQL-Modus beim Start des Servers über die Befehlszeile festzulegen, verwenden Sie die Option --sql-mode="".

*Wo eine Liste verschiedener Modi ist, die durch Kommas getrennt sind.

Um den SQL-Modus ausdrücklich zu löschen, setzen Sie ihn auf einen leeren String mit --sql-mode="" auf der Befehlszeile oder sql-mode="" in einer Optiondatei.

Ich habe die sql-mode=""-Option zu /etc/my.cnf hinzugefügt und es hat funktioniert.

Diese SO-Lösung diskutiert Möglichkeiten, herauszufinden, welche my.cnf-Datei von MySQL verwendet wird.

Vergessen Sie nicht, MySQL nach Änderungen neu zu starten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X