it-swarm.com.de

Deaktivieren Sie ONLY_FULL_GROUP_BY

Ich habe den ONLY_FULL_GROUP_BY-Modus versehentlich folgendermaßen aktiviert:

SET sql_mode = 'ONLY_FULL_GROUP_BY';

Wie kann ich es deaktivieren?

418
ZviBar

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

  • Öffne phpmyadmin und wähle localhost
  • Klicken Sie auf das Menü Variablen und scrollen Sie nach unten, um den SQL-Modus aufzurufen
  • Klicken Sie auf die Schaltfläche Bearbeiten, um die Werte zu ändern und entfernen Sie ONLY_FULL_GROUP_BY und klicken Sie auf Speichern. enter image description here
954
Eyo Okon Eyo

Update:

enter image description here

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

Vorsicht! Das Ergebnis 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:

  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 deaktiviert ONLY_FULL_GROUP_BY Für [~ # ~] alle [~ # ~] Benutzer

339
breq

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.

177
Taran

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.

93
Tripp Kinetics
    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;
91
WeiYuan

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

56

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.

38
Arvid

Auf:

  • 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

Zum Ende der Datei

$ Sudo service mysql restart
26
Jadeye

Die MySQL-Dokumentation gibt außerdem die folgenden Methoden an:

  • Legen Sie sql-mode="<modes>" in einer Optionsdatei wie my.cnf (Unix-Betriebssysteme) oder my.ini (Windows) fest.
  • Verwenden Sie die Option --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.

22
br3nt

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 .

20
Waqleh

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 aus

 Checkout this image

18
Shiran Gabriel

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!

10

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 +

MySQL 5.6 Referenz

9

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
5
Hiren Bhut

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.

5
cwhisperer

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.

2
demisx

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!

2
AamirR

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'
2
Matt Vegas

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)

  1. Geben Sie WHM als root ein und führen Sie phpMyAdmin aus

  2. 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
  1. Stellen Sie über SFTP-SSH (root) eine Verbindung zu Ihrem Server her und laden Sie die Datei /etc/my.cnf herunter.

  2. Ö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
  1. Speichern Sie die my.cnf -Datei und laden Sie sie zurück in /etc/.

  2. Geben Sie WHM ein und gehen Sie zu "WHM> Restart Services> SQL Server (MySQL)", und starten Sie den Dienst neu

1
Marco Demaio

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', ''));

0

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"
0
Dio Phung