Ich habe versehentlich den ONLY_FULL_GROUP_BY-Modus wie folgt aktiviert:
SET sql_mode = 'ONLY_FULL_GROUP_BY';
Wie deaktiviere ich es?
mysql
mysql-workbench
ZviBar
quelle
quelle
SET sql_mode = ''
?column
Funktion ANY_VALUE ( ) verwenden, um Ihre Abfrage nachzurüsten. Siehe Dokument hierAntworten:
Lösung 1: Entfernen Sie ONLY_FULL_GROUP_BY von der MySQL-Konsole
Sie können hier mehr lesen
Lösung 2: Entfernen Sie ONLY_FULL_GROUP_BY aus phpmyadmin
quelle
REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','')
, MySQL entfernt sowieso unerwünschte Kommas aus dem Datensatz. Die Antwort von OP ist richtig.GLOBAL
hat bei mir nicht funktioniert, aberSESSION
funktioniert.SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
Aktualisieren:
Um Ihre aktuellen MySQL-Einstellungen
ONLY_FULL_GROUP_BY
beizubehalten und 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
nächstes Kopierergebnis in Ihre
my.ini
Datei.Minze :
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!
copy_me
Das Ergebnis kann einen langen Text enthalten, der möglicherweise standardmäßig gekürzt wird. Stellen Sie sicher, dass Sie den gesamten Text kopieren!alte Antwort:
Wenn Sie den Fehler dauerhaft deaktivieren möchten "Der Ausdruck #N der SELECT-Liste befindet sich nicht in der GROUP BY-Klausel und enthält die nicht aggregierte Spalte 'db.table.COL', die funktional nicht von den Spalten in der GROUP BY-Klausel abhängig ist. Dies ist nicht kompatibel mit sql_mode = only_full_group_by "Machen Sie diese Schritte:
sudo nano /etc/mysql/my.cnf
Fügen Sie dies am Ende der Datei hinzu
sudo service mysql restart
um MySQL neu zu startenDies wird
ONLY_FULL_GROUP_BY
für ALLE Benutzer deaktiviertquelle
/etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
möglicherweise nicht in dieser Datei, sondern möglicherweise in einem Include-Verzeichnis. Verwenden Sie zuerst diesen Befehl: umgrep -R "\[mysqld\]" *
zu sehen, was da ist - und versuchen Sie es auchgrep -R "\bsql_mode\b" *
Seien Sie vorsichtig mit
Dadurch werden alle derzeit aktivierten Modi gelöscht. Wenn Sie sich nicht mit anderen Einstellungen anlegen möchten, sollten Sie eine
Um zuerst eine durch Kommas getrennte Liste der aktivierten Modi zu erhalten, setzen Sie sie dann ohne die
ONLY_FULL_GROUP_BY
Option auf diese Liste .quelle
then SET it to this list without the ONLY_FULL_GROUP_BY option.
?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';
sql_mode=<comma-separated-list>
Stoppen Sie dann Ihren Server und starten Sie ihn. Befolgen Sie die Dokumente für Ihr Betriebssystem, um den Speicherort und die beste Methode zum Bearbeiten von my.cnf zu ermitteln.Probieren Sie es aus:
Community-Hinweis: Wie in den folgenden Antworten ausgeführt, werden alle derzeit aktivierten SQL-Modi gelöscht. Das muss nicht unbedingt das sein, was Sie wollen.
quelle
''
='full group by is disabled'
? MySQL macht einige ziemlich dumme Sachen, aber diese ist da oben.0 rows affected
und meine Abfrage funktioniert immer noch nicht:Error Code: 1055. Expression #6 of SELECT list is not in GROUP BY clause and contains nonaggregated column ...
global
im Befehl verwenden .quelle
sql_mode
Rollback auf den vorherigen Wert durchgeführt. Was kann ich jetzt machen?Hinzufügen nur eines Modus zu sql_mode, ohne vorhandene zu entfernen:
Entfernen nur eines bestimmten Modus aus sql_mode, ohne andere zu entfernen:
Wenn Sie in Ihrem Fall nur den
ONLY_FULL_GROUP_BY
Modus entfernen möchten , verwenden Sie den folgenden Befehl:Referenz: http://johnemb.blogspot.com/2014/09/adding-or-removing-individual-sql-modes.html
quelle
Vielen Dank an @cwhisperer. Ich hatte das gleiche Problem mit Doctrine in einer Symfony-App. Ich habe gerade die Option zu meiner config.yml hinzugefügt:
Das hat bei mir gut funktioniert.
quelle
SET NAMES
mit dieser Methode. In den meisten Fällen wird sie nicht benötigt. Symfony wird bereits über doi.dbal.charset festgelegt SET NAMES ist eine veraltete Methode, die nicht für PHP-Versionen größer als 5.3 verwendet werden sollteAuf:
Tun:
Kopieren und Einfügen:
Zum Ende der Datei
quelle
/etc/mysql/mysql.cnf
zeigt auf 2 Konfigurationsordner!includedir /etc/mysql/conf.d/
+!includedir /etc/mysql/mysql.conf.d/
. Gleiches gilt für/etc/mysql/my.cnf
. Daher gehe ich davon aus, dass Konfigurationsdateien beim Update nicht überschrieben werden. Sie können mehr hier lesenhttp://dev.mysql.com/doc/mysql/en/server-system-variables.html
sql_mode = "STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
vielleicht ist es wichtig,/etc/mysql/mysql.conf.d/mysqld_mode.cnf
stattdessen eine neue Datei zu erstellenIch habe festgestellt, dass die @ Eyo Okon Eyo-Lösung funktioniert, solange der MySQL-Server nicht neu gestartet wird und die Standardeinstellungen wiederhergestellt werden. Hier ist eine dauerhafte Lösung, die für mich funktioniert hat:
So entfernen Sie einen bestimmten SQL-Modus (in diesem Fall ONLY_FULL_GROUP_BY ): Suchen Sie den aktuellen SQL-Modus:
Kopieren Sie das Ergebnis und entfernen Sie das, was Sie nicht benötigen ( ONLY_FULL_GROUP_BY ).
z.B:
zu
Erstellen und öffnen Sie diese Datei:
und schreiben und fügen Sie Ihren neuen SQL-Modus ein:
Starten Sie MySQL neu:
Oder Sie können die
ANY_VALUE()
Unterdrückung von ONLY_FULL_GROUP_BY-Werten unterdrücken. Weitere Informationen finden Sie hierquelle
ANY_VALUE()
In der MySQL-Dokumentation werden außerdem die folgenden Methoden angegeben:
sql-mode="<modes>"
in einer Optionsdatei wie my.cnf (Unix - Betriebssysteme) oder my.ini (Windows).--sql-mode="<modes>"
Option, um den SQL-Modus beim Serverstart über die Befehlszeile festzulegen.* Wo
<modes>
ist eine Liste von verschiedenen Modi durch Kommas getrennt.Um den SQL-Modus explizit zu löschen, setzen Sie ihn in
--sql-mode=""
der Befehlszeile odersql-mode=""
in einer Optionsdatei auf eine leere Zeichenfolge .Ich habe die
sql-mode=""
Option hinzugefügt/etc/my.cnf
und es hat funktioniert.Diese SO-Lösung beschreibt Möglichkeiten, um herauszufinden, welche my.cnf-Datei von MySQL verwendet wird.
Vergessen Sie nicht, MySQL nach Änderungen neu zu starten.
quelle
SELECT @@GLOBAL.sql_mode;
Wenn Sie WAMP verwenden. Klicken Sie mit der linken Maustaste auf das WAMP-Symbol, gehen Sie zu MySQL -> MySQL-Einstellungen -> SQL-Modus und wählen Sie dann SQL-Modus-> Benutzermodus
quelle
Auf meinem SQL (Version 5.7.11 unter Mac OS X) funktioniert dies für mich auf dem MySQL-Shell-Client:
Laut MySQL 5.6-Dokumentation ist sql_mode standardmäßig
leere Zeichenfolge in MySQL 5.6.5 und zurück NO_ENGINE_SUBSTITUTION, STRICT_TRANS_TABLES in 5.6.6 +
MySQL 5.6 Referenz
quelle
sql_mode := ''
möglich zu sein. Warum bist du anderer Meinung?Bearbeiten Sie unter MySQL 5.7 und Ubuntu 16.04 die Datei mysql.cnf.
Fügen Sie den sql_mode wie folgt ein und speichern Sie die Datei.
Beachten Sie, dass ich in meinem Fall den Modus STRICT_TRANS_TABLES und ONLY_FULL_GROUP_BY entfernt habe.
Auf diese Weise wird die Moduskonfiguration dauerhaft gespeichert. Anders, wenn Sie nur den @@ sql_mode über MySQL aktualisieren, da er beim Neustart des Computers / Dienstes zurückgesetzt wird.
Starten Sie anschließend den MySQL-Dienst neu, um die geänderte Konfiguration auszuführen:
Versuchen Sie, auf die MySQL zuzugreifen:
Wenn Sie sich anmelden und auf die MySQL-Konsole zugreifen können, ist dies in Ordnung. Großartig!
ABER , wenn du wie ich den Fehler Gesicht „unbekannte Variable sql_mode“ , die die angibt , sql_mode ist eine Option für mysqld , werden Sie zurück gehen müssen, bearbeiten Sie die Datei mysql.cnf erneut und ändern Sie das
[mysql]
zu[mysqld]
. Starten Sie den MySQL-Dienst neu und führen Sie einen letzten Test durch, um sich an der MySQL-Konsole anzumelden. Hier ist es!quelle
Folgendes habe ich durchgeführt, um das Problem auf der MySQL-Workbench zu beheben:
Bevor ich den aktuellen Wert mit dem folgenden Befehl bekam
Später entfernte ich den Schlüssel ONLY_FULL_GROUP_BY aus der Liste und fügte den folgenden Befehl ein
quelle
Für Mac OS Mojave (10.14) Öffnen Sie das Terminal
Fügen Sie Folgendes ein:
Tastenkombinationen zum Speichern und Beenden von Nano:
Ctrl+x
undy
undEnter
Hinweis: Möglicherweise müssen Sie
mysql-5.7.24-macos10.14-x86_64
diese Befehleaktualisieren.Überprüfen Sie einfach den richtigen Ordnernamen, den Sie erhalten haben/usr/local/
Hoffe es wird jemandem helfen!
quelle
Modi hinzufügen oder entfernen zu
sql_mode
MySQL 5.7.9 oder höher
Zum Hinzufügen oder Entfernen eines Modus
sql_mode
können Sielist_add
undlist_drop
Funktionen verwenden.Um einen Modus aus dem aktuellen zu entfernen
SESSION.sql_mode
, können Sie einen der folgenden Schritte ausführen:So entfernen Sie einen Modus aus dem Modus, der
GLOBAL.sql_mode
für den aktuellen Laufzeitvorgang bestehen bleibt , bis der Dienst neu gestartet wird .MySQL 5.7.8 oder früher
Da es sich bei dem
sql_mode
Wert um eine CSV-Zeichenfolge von Modi handelt, müssen Sie sicherstellen, dass die Zeichenfolge keine Restkommas enthält. Dies kann mithilfe von erreicht werdenTRIM(BOTH ',' FROM ...)
.Um einen Modus aus der
sql_mode
Variablen zu entfernen , sollten SieREPLACE()
zusammen mit verwenden,TRIM()
um sicherzustellen, dass alle verbleibenden Kommas entfernt werden.Um der
sql_mode
Variablen einen Modus hinzuzufügen , möchten Sie verwendenCONCAT_WS(',', ...)
, um sicherzustellen, dass ein Komma an die aktuellen Modi angehängt wird undTRIM()
um sicherzustellen, dass alle verbleibenden Kommas entfernt werden.Zurück zu
GLOBAL.sql_mode
Da die Änderung
SET sql_mode = 'ONLY_FULL_GROUP_BY';
ohne denGLOBAL
Modifikator ausgeführt wurde, wirkte sich die Änderung nur auf den aktuellenSESSION
Statuswert aus, der sich auch auf bezieht@@sql_mode
. Um es zu entfernen und beim Neustart des Servers auf den globalen Standardwert zurückzusetzen , möchten Sie den Wert von verwenden@@GLOBAL.sql_mode
. [sic]Um den aktuellen Sitzungsstatuswert auf den aktuellen globalen Wert zurückzusetzen, können Sie eine der folgenden Methoden verwenden:
Ändern Sie den
SESSION.sql_mode
Wert inONLY_FULL_GROUP_BY
Setzen Sie den
SESSION.sql_mode
Wert auf denGLOBAL.sql_mode
Wert zurückServer Restart Persistent
sql_mode
Bitte sehen Sie Ihre Version von MySQL die unterstützten und Standard bestimmen Modi .
sql_mode
StandardwerteDa die Werte für die MySQL-Dokumentation pro Version entfernt wurden, habe ich sie hier als Referenz hinzugefügt.
MySQL> = 8.0.11 8.0.5 - 8.0.10 Übersprungen
MySQL> = 5.7.8, <= 8.0.4
MySQL 5.7.7
MySQL> = 5.7.5, <= 5.7.6
MySQL> = 5.6.6, <= 5.7.4
MySQL <= 5.6.5
quelle
Wenn Sie MySQL 8.0.11 verwenden, müssen Sie 'NO_AUTO_CREATE_USER' aus dem SQL-Modus entfernen.
Fügen Sie die folgende Zeile in die Datei
/etc/mysql/my.cnf
und den [mysqld] -Header einquelle
Ich verwende Doctrine und habe die driverOptions in meiner doctrine.local.php hinzugefügt:
In phpmyadmin muss der Benutzer SUPER in den Berechtigungen aktiviert haben.
quelle
Für wen ein VPS / Server mit cPanel / WHM ausgeführt wird , können Sie Folgendes tun, um ONLY_FULL_GROUP_BY dauerhaft zu deaktivieren
Sie benötigen Root-Zugriff (entweder auf einem VPS oder einem dedizierten Server).
Geben Sie WHM als root ein und führen Sie phpMyAdmin aus
Klicken Sie auf Variablen, suchen Sie nach
sql_mode
, klicken Sie auf "Bearbeiten" und kopieren Sie die gesamte Zeile in dieses TextfeldzB kopiere dies:
Stellen Sie über SFTP - SSH (root) eine Verbindung zu Ihrem Server her und laden Sie die Datei herunter
/etc/my.cnf
Öffnen Sie mit einer Texteditordatei
my.cnf
auf Ihrem lokalen PC und fügen Sie (unter[mysqld]
Abschnitt) die gesamte Zeile ein, die Sie in Schritt (2) kopiert haben, aber entfernen Sie sieONLY_FULL_GROUP_BY,
zB einfügen:
Speichern Sie die
my.cnf
Datei und laden Sie sie wieder hoch/etc/
Geben Sie WHM ein und gehen Sie zu "WHM> Dienste neu starten> SQL Server (MySQL)" und starten Sie den Dienst neu
quelle
Ich arbeite mit MySQL und bin beim Root-Benutzer registriert. Die Lösung, die für mich funktioniert, ist die folgende:
quelle
Dies ist eine dauerhafte Lösung für MySql 5.7+ unter Ubuntu 14+:
Wenn Sie sich fehlerfrei anmelden können, sollten Sie jetzt fertig sein.
quelle
Sie können es mithilfe der Konfigurationsdatei deaktivieren
my.cnf
:In macOS 10.12 ist es also bei
usr/local/etc/my.cnf
. Sie könnensql_mode
hier bearbeiten :quelle
Hier ist meine Lösung zum Ändern der MySQL-Konfiguration über das phpmyadmin-Dashboard:
Um zu beheben, dass "dies nicht mit sql_mode = only_full_group_by kompatibel ist": Öffnen Sie phpmyadmin und gehen Sie zur Startseite und wählen Sie das Untermenü "Variablen". Scrollen Sie nach unten, um den SQL-Modus zu finden. Bearbeiten Sie den SQL-Modus und entfernen Sie 'ONLY_FULL_GROUP_BY'. Speichern Sie ihn.
quelle
mit MySQL Version 5.7.28 überprüfen mit
SELECT @@sql_mode;
und aktualisieren mitquelle