Ich habe den ONLY_FULL_GROUP_BY-Modus versehentlich folgendermaßen aktiviert:
SET sql_mode = 'ONLY_FULL_GROUP_BY';
Wie kann ich es deaktivieren?
Lösung 1: Entfernen Sie ONLY_FULL_GROUP_BY von der MySQL-Konsole
mysql > SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
sie können mehr lesen hier
Lösung 2: Entfernen Sie ONLY_FULL_GROUP_BY aus phpmyadmin
Um Ihre aktuellen MySQL-Einstellungen beizubehalten und ONLY_FULL_GROUP_BY
Zu deaktivieren, schlage ich vor, Ihren phpmyadmin oder den von Ihnen verwendeten Client aufzusuchen und Folgendes einzugeben:
SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','') copy_me
nächstes Kopierergebnis in Ihre my.ini
- Datei.
Postfrisch : 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
copy_me
Kann einen Langtext enthalten, der möglicherweise standardmäßig abgeschnitten wird. Stellen Sie sicher, dass Sie den gesamten Text kopieren!alte Antwort:
Wenn Sie den dauerhaften Fehler 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 ', das funktional nicht von Spalten in der GROUP BY-Klausel abhängig ist; dies ist nicht kompatibel mit sql_mode = only_full_group_by "Führen Sie die folgenden Schritte aus:
Sudo nano /etc/mysql/my.cnf
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"
Sudo service mysql restart
Um MySQL neu zu starten
Dies deaktiviert ONLY_FULL_GROUP_BY
Für [~ # ~] alle [~ # ~] Benutzer
Seien Sie vorsichtig mit
SET sql_mode = ''
Dadurch werden alle derzeit aktivierten Modi gelöscht. Wenn Sie sich nicht mit anderen Einstellungen beschäftigen möchten, müssen Sie eine
SELECT @@sql_mode
um eine durch Kommas getrennte Liste der Modi zu erhalten, setzen Sie diese Option ohne die ONLY_FULL_GROUP_BY
-Option auf diese Liste.
Probieren Sie es aus:
SET sql_mode = ''
Community-Hinweis: Wie in den Antworten unten ausgeführt, werden damit alle die derzeit aktivierten SQL-Modi gelöscht. Das muss nicht unbedingt das sein, was Sie wollen.
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;
Hinzufügen von nur einem Modus zu sql_mode, ohne vorhandene zu entfernen:
SET sql_mode=(SELECT CONCAT(@@sql_mode,',<mode_to_add>'));
Entfernen nur eines bestimmten Modus aus dem sql_mode, ohne andere zu entfernen:
SET sql_mode=(SELECT REPLACE(@@sql_mode,'<mode_to_remove>',''));
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
Danke an @cwhisperer . Ich hatte das gleiche Problem mit Doctrine in einer Symfony-App. Ich habe gerade die Option 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',''))"
Das hat gut für mich funktioniert.
Auf:
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
Zum Ende der Datei
$ Sudo service mysql restart
Die MySQL-Dokumentation gibt außerdem die folgenden Methoden an:
sql-mode="<modes>"
in einer Optionsdatei wie my.cnf (Unix-Betriebssysteme) oder my.ini (Windows) fest.--sql-mode="<modes>"
, um den SQL-Modus beim Starten des Servers über die Befehlszeile einzustellen.* Dabei ist <modes>
eine Liste von durch Kommas getrennten Modi.
Um den SQL-Modus explizit zu löschen, setzen Sie ihn mit --sql-mode=""
in der Befehlszeile oder sql-mode=""
in einer Optionsdatei auf eine leere Zeichenfolge.
Ich habe die sql-mode=""
-Option zu /etc/my.cnf
hinzugefügt 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 den Änderungen neu zu starten.
Ich 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:
Um einen bestimmten SQL-Modus zu entfernen (in diesem Fall ONLY_FULL_GROUP_BY), suchen Sie den aktuellen SQL-Modus:
SELECT @@GLOBAL.sql_mode;
kopieren Sie das Ergebnis und entfernen Sie alles, was Sie nicht benötigen (ONLY_FULL_GROUP_BY).
z.B.:
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
zu
STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
diese Datei erstellen und öffnen:
/etc/mysql/conf.d/disable_strict_mode.cnf
und schreibe und füge deinen neuen SQL-Modus 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
starten Sie MySQL neu:
Sudo service mysql restart
Oder Sie können ANY_VALUE()
verwenden, um die Zurückweisung von ONLY_FULL_GROUP_BY-Werten zu unterdrücken. Sie können hier mehr darüber lesen .
Bearbeiten Sie in MySQL 5.7 und Ubuntu 16.04 die Datei mysql.cnf.
$ Sudo nano /etc/mysql/conf.d/mysql.cnf
Fügen Sie den sql_mode wie folgt ein und speichern Sie die Datei.
[mysql]
sql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Beachten Sie, dass ich in meinem Fall den Modus STRICT_TRANS_TABLES und den ONLY_FULL_GROUP_BY entfernt habe.
Dadurch wird die Moduskonfiguration dauerhaft gespeichert. Anders, wenn Sie einfach @@ sql_mode über MySQL aktualisieren, da es beim Neustart der Maschine/des Dienstes zurückgesetzt wird.
Starten Sie danach den mysql-Dienst neu, damit die geänderte Konfiguration wirksam wird:
$ Sudo service mysql restart
Versuchen Sie, auf die Mysql zuzugreifen:
$ mysql -u user_name -p
Wenn Sie sich anmelden und auf die MySQL-Konsole zugreifen können, ist dies in Ordnung. Großartig!
ABER, wenn Sie wie ich mit dem Fehler "unbekannte Variable sql_mode" konfrontiert sind, der angibt, dass sql_mode eine Option für mysqld ist, müssen Sie zurückgehen , bearbeiten Sie die Datei mysql.cnf erneut und ändern Sie den [mysql]
in [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!
Auf meinem SQL-Server (Version 5.7.11 unter Mac OS X) funktioniert das für mich auf dem MySQL-Shell-Client:
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"
Laut MySQL 5.6-Dokumentation ist sql_mode der Standardwert
leere Zeichenfolge in MySQL 5.6.5 und zurück NO_ENGINE_SUBSTITUTION, STRICT_TRANS_TABLES in 5.6.6 +
Wenn Sie MySQL 8.0.11 verwenden, müssen Sie den Befehl NO_AUTO_CREATE_USER aus dem SQL-Modus entfernen.
Fügen Sie die folgende Zeile in der Datei /etc/mysql/my.cnf
und [mysqld] -Header hinzu
[mysqld]
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
Ich verwende doctrine und habe die driverOptions in meine doctrine.local.php eingefügt:
return array(
'doctrine' => array(
'connection' => array(
'orm_default' => array(
'driverClass' => 'Doctrine\DBAL\Driver\PDOMySql\Driver',
'params' => array(
'Host' => 'localhost',
'port' => '3306',
'user' => 'myusr',
'password' => 'mypwd',
'dbname' => 'mydb',
'driverOptions' => array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''))"
),
),
),
),
));
In phpmyadmin muss der Benutzer SUPER in den Berechtigungen aktiviert haben.
Dies ist eine dauerhafte Lösung für MySql 5.7+ auf Ubuntu 14+:
$ Sudo bash -c "echo -e \"\nsql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION\" >> /etc/mysql/mysql.conf.d/mysqld.cnf"
$ Sudo service mysql restart
# Check if login attempt throws any errors
$ mysql -u[user] -p # replace [user] with your own user name
Wenn Sie sich ohne Fehler anmelden können, sollten Sie jetzt alle Einstellungen vornehmen.
Für Mac OS Mojave (10.14) Öffnen Sie das Terminal
$ Sudo mkdir /usr/local/mysql-5.7.24-macos10.14-x86_64/etc
$ cd /usr/local/mysql-5.7.24-macos10.14-x86_64/etc
$ Sudo nano my.cnf
Fügen Sie folgendes ein:
[mysqld]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
Kurzbefehle zum Speichern und Beenden von nano: Ctrl+x
und y
und Enter
Hinweis:Möglicherweise müssen Sie mysql-5.7.24-macos10.14-x86_64
in diesen Befehlen aktualisieren. Überprüfen Sie einfach den richtigen Ordnernamen, den Sie in /usr/local/
erhalten haben.
Hoffe es wird jemandem helfen!
Ich habe dies zur Behebung der MySQL-Workbench durchgeführt:
Bevor ich den aktuellen Wert mit dem folgenden Befehl bekam
SELECT @@sql_mode
später entfernte ich den Schlüssel ONLY_FULL_GROUP_BY aus der Liste und fügte den folgenden Befehl ein
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'
Für wen ist ein VPS/Server mit cPanel/WHM ausgeführt, können Sie ONLY_FULL_GROUP_BY dauerhaft 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 innerhalb dieses Textfelds
z.B. Kopier das:
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
Stellen Sie über SFTP-SSH (root) eine Verbindung zu Ihrem Server her und laden Sie die Datei /etc/my.cnf
herunter.
Öffnen Sie mit einem Texteditor my.cnf
-Datei auf Ihrem lokalen PC und fügen Sie die gesamte Zeile, die Sie in Schritt (2) kopiert haben, in den Abschnitt [mysqld]
ein, aber entfernen Sie ONLY_FULL_GROUP_BY,
.
z.B. fügen Sie diese ein:
# disabling ONLY_FULL_GROUP_BY
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Speichern Sie die my.cnf
-Datei und laden Sie sie zurück in /etc/
.
Geben Sie WHM ein und gehen Sie zu "WHM> Restart Services> SQL Server (MySQL)", und starten Sie den Dienst neu
Ich arbeite mit MySQL und habe mich bei Root angemeldet. Die Lösung, die für mich funktioniert, ist folgende:
mysql> SET SESSION sql_mode = (SELECT REPLACE (@@ sql_mode, 'ONLY_FULL_GROUP_BY', ''));
Sie können es mit der Konfigurationsdatei my.cnf
deaktivieren:
$ mysql --verbose --help | grep my.cnf
In macOS 10.12 ist es also usr/local/etc/my.cnf
. Sie können sql_mode
hier bearbeiten:
# Default Homebrew MySQL server config
[mysqld]
# Only allow connections from localhost
bind-address = 127.0.0.1
sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"