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?

1634voto

Eyo Okon Eyo Punkte 15666

Lösung 1: Entfernen Sie ONLY_FULL_GROUP_BY aus der MySQL-Konsole

mysql > SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

Weitere Informationen finden Sie hier

Beachten Sie, dass diese Einstellung NICHT über Neustarts hinweg bestehen bleibt, verwenden Sie dann

mysql > SET PERSIST sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

Lösung 2: Entfernen Sie ONLY_FULL_GROUP_BY aus phpMyAdmin

  • Öffnen Sie phpMyAdmin & wählen Sie localhost
  • Klicken Sie im Menü auf Variablen & scrollen Sie nach unten zum SQL-Modus
  • Klicken Sie auf die Schaltfläche "Bearbeiten", um die Werte zu ändern & entfernen Sie ONLY_FULL_GROUP_BY & klicken Sie auf Speichern. enter image description here

433voto

breq Punkte 23692

Aktualisierung:

Bildbeschreibung hier eingeben

Um Ihre aktuellen MySQL-Einstellungen beizubehalten und ONLY_FULL_GROUP_BY zu deaktivieren, empfehle ich, Ihren phpMyAdmin oder den von Ihnen verwendeten Client zu besuchen und Folgendes einzugeben:

SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','') copy_me

Dann kopieren Sie das Ergebnis in Ihre my.ini Datei.

Mint: sudo nano /etc/mysql/my.cnf

Ubuntu 16 und höher: sudo nano /etc/mysql/my.cnf

Ubuntu 14-16: /etc/mysql/mysql.conf.d/mysqld.cnf

Vorsicht! Das Ergebnis von copy_me kann lange Texte enthalten, die standardmäßig gekürzt werden. Stellen Sie sicher, dass Sie den gesamten Text kopieren!


Alte Antwort:

Wenn Sie den Fehler "Ausdruck #N der SELECT-Liste ist nicht in der GROUP BY-Klausel und enthält eine nicht aggregierte Spalte 'db.table.COL', die nicht funktional abhängig von Spalten in der GROUP BY-Klausel ist; dies ist unvereinbar mit sql_mode=only_full_group_by" permanent deaktivieren möchten, führen Sie die folgenden Schritte aus:

  1. sudo nano /etc/mysql/my.cnf

  2. Fügen Sie dies am Ende der Datei hinzu

    [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"
  3. sudo service mysql restart, um MySQL neu zu starten

Dies wird ONLY_FULL_GROUP_BY für ALLE Benutzer deaktivieren

260voto

Taran Punkte 10819

Vorsicht beim Verwenden von

SET sql_mode = '' 

Dies löscht tatsächlich alle aktuell aktivierten Modi. Wenn Sie nicht mit anderen Einstellungen durcheinander kommen möchten, sollten Sie zuerst einen

SELECT @@sql_mode 

durchführen, um eine kommagetrennte Liste der aktivierten Modi zu erhalten, und es dann auf diese Liste ohne die ONLY_FULL_GROUP_BY Option setzen.

122voto

WeiYuan Punkte 5832
    mysql> set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
    mysql> set session sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
    mysql> exit;

120voto

Nur einen Modus zu sql_mode hinzufügen, ohne vorhandene zu entfernen:

SET sql_mode=(SELECT CONCAT(@@sql_mode,','));

Nur einen bestimmten Modus aus sql_mode entfernen, ohne andere zu entfernen:

SET sql_mode=(SELECT REPLACE(@@sql_mode,'',''));

_In Ihrem Fall, wenn Sie nur den ONLY_FULL_GROUP_BY Modus entfernen möchten, verwenden Sie den folgenden Befehl:_

SET sql_mode=(SELECT REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', ''));

Referenz: http://johnemb.blogspot.com/2014/09/adding-or-removing-individual-sql-modes.html

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