Ich habe versehentlich den ONLY_FULL_GROUP_BY-Modus wie folgt aktiviert:
SET sql_mode = 'ONLY_FULL_GROUP_BY';
Wie deaktiviere ich es?
column
Funktion ANY_VALUE ( ) verwenden, um Ihre Abfrage nachzurüsten. Siehe Dokument hier
Ich habe versehentlich den ONLY_FULL_GROUP_BY-Modus wie folgt aktiviert:
SET sql_mode = 'ONLY_FULL_GROUP_BY';
Wie deaktiviere ich es?
column
Funktion ANY_VALUE ( ) verwenden, um Ihre Abfrage nachzurüsten. Siehe Dokument hier
Antworten:
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 hier mehr lesen
Lösung 2: Entfernen Sie ONLY_FULL_GROUP_BY aus phpmyadmin
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, aber SESSION
funktioniert. SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
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
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
[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 wird ONLY_FULL_GROUP_BY
für ALLE Benutzer deaktiviert
/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: um grep -R "\[mysqld\]" *
zu sehen, was da ist - und versuchen Sie es auchgrep -R "\bsql_mode\b" *
Seien Sie vorsichtig mit
SET sql_mode = ''
Dadurch werden alle derzeit aktivierten Modi gelöscht. Wenn Sie sich nicht mit anderen Einstellungen anlegen möchten, sollten Sie eine
SELECT @@sql_mode
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 .
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:
SET sql_mode = ''
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.
''
= '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 .
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;
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:
SET sql_mode=(SELECT CONCAT(@@sql_mode,',<mode_to_add>'));
Entfernen nur eines bestimmten Modus aus sql_mode, ohne andere zu entfernen:
SET sql_mode=(SELECT REPLACE(@@sql_mode,'<mode_to_remove>',''));
Wenn Sie in Ihrem Fall 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
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:
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 bei mir gut funktioniert.
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 sollte
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
/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 erstellen
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:
So entfernen Sie einen bestimmten SQL-Modus (in diesem Fall ONLY_FULL_GROUP_BY ): Suchen Sie den aktuellen SQL-Modus:
SELECT @@GLOBAL.sql_mode;
Kopieren Sie das Ergebnis und entfernen Sie das, 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
Erstellen und öffnen Sie diese Datei:
/etc/mysql/conf.d/disable_strict_mode.cnf
und schreiben und fügen Sie Ihren neuen SQL-Modus ein:
[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 die ANY_VALUE()
Unterdrückung von ONLY_FULL_GROUP_BY-Werten unterdrücken. Weitere Informationen finden Sie hier
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 oder sql-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.
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
Auf meinem SQL (Version 5.7.11 unter Mac OS X) funktioniert dies 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 standardmäßig
leere Zeichenfolge in MySQL 5.6.5 und zurück NO_ENGINE_SUBSTITUTION, STRICT_TRANS_TABLES in 5.6.6 +
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.
$ 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 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:
$ 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 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!
Folgendes habe ich durchgeführt, um das Problem auf der MySQL-Workbench zu beheben:
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 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
Tastenkombinationen zum Speichern und Beenden von Nano: Ctrl+x
und y
undEnter
Hinweis: Möglicherweise müssen Siemysql-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!
sql_mode
MySQL 5.7.9 oder höher
Zum Hinzufügen oder Entfernen eines Modus sql_mode
können Sie list_add
und list_drop
Funktionen verwenden.
Um einen Modus aus dem aktuellen zu entfernen SESSION.sql_mode
, können Sie einen der folgenden Schritte ausführen:
SET SESSION sql_mode = sys.list_drop(@@SESSION.sql_mode, 'ONLY_FULL_GROUP_BY');
SET sql_mode = sys.list_drop(@@sql_mode, 'ONLY_FULL_GROUP_BY');
SET @@sql_mode = sys.list_drop(@@sql_mode, 'ONLY_FULL_GROUP_BY');
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 .
SET GLOBAL sql_mode = sys.list_drop(@@GLOBAL.sql_mode, 'ONLY_FULL_GROUP_BY');
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 werden TRIM(BOTH ',' FROM ...)
.
Um einen Modus aus der sql_mode
Variablen zu entfernen , sollten Sie REPLACE()
zusammen mit verwenden, TRIM()
um sicherzustellen, dass alle verbleibenden Kommas entfernt werden.
SET SESSION sql_mode = TRIM(BOTH ',' FROM REPLACE(@@SESSION.sql_mode, 'ONLY_FULL_GROUP_BY', ''));
SET GLOBAL sql_mode = TRIM(BOTH ',' FROM REPLACE(@@GLOBAL.sql_mode, 'ONLY_FULL_GROUP_BY', ''));
Um der sql_mode
Variablen einen Modus hinzuzufügen , möchten Sie verwenden CONCAT_WS(',', ...)
, um sicherzustellen, dass ein Komma an die aktuellen Modi angehängt wird und TRIM()
um sicherzustellen, dass alle verbleibenden Kommas entfernt werden.
SET SESSION sql_mode = TRIM(BOTH ',' FROM CONCAT_WS(',', 'ONLY_FULL_GROUP_BY', @@SESSION.sql_mode));
SET GLOBAL sql_mode = TRIM(BOTH ',' FROM CONCAT_WS(',', 'ONLY_FULL_GROUP_BY', @@GLOBAL.sql_mode));
HINWEIS: Das Ändern der
GLOBAL
Variablen wird erst dann auf dieSESSION
Variable übertragen, wenn eine neue Verbindung hergestellt wurde.Die
GLOBAL
Variable bleibt bestehen, bis der laufende Dienst neu gestartet wird.Die
SESSION
Variable bleibt für die aktuelle Verbindung bestehen, bis die Verbindung geschlossen und eine neue Verbindung hergestellt wird.
GLOBAL.sql_mode
Da die Änderung SET sql_mode = 'ONLY_FULL_GROUP_BY';
ohne den GLOBAL
Modifikator ausgeführt wurde, wirkte sich die Änderung nur auf den aktuellen SESSION
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]
Der aktuelle
SESSION
Wert gilt nur für die aktuelle Verbindung. Durch erneutes Herstellen einer Verbindung zum Server wird der Wert auf den Wert zurückgesetztGLOBAL
Wert zurückgesetzt.
Um den aktuellen Sitzungsstatuswert auf den aktuellen globalen Wert zurückzusetzen, können Sie eine der folgenden Methoden verwenden:
SET SESSION sql_mode = @@GLOBAL.sql_mode;
SET @@sql_mode = @@GLOBAL.sql_mode;
SET sql_mode = @@GLOBAL.sql_mode;
Ändern Sie den SESSION.sql_mode
Wert inONLY_FULL_GROUP_BY
SET sql_mode = 'ONLY_FULL_GROUP_BY';
SELECT @@sql_mode, @@GLOBAL.sql_mode;
+--------------------+----------------------------------------------+
| @@sql_mode | @@GLOBAL.sql_mode |
+--------------------+----------------------------------------------+
| ONLY_FULL_GROUP_BY | NO_AUTO_VALUE_ON_ZERO,NO_ENGINE_SUBSTITUTION |
+--------------------+----------------------------------------------+
Setzen Sie den SESSION.sql_mode
Wert auf den GLOBAL.sql_mode
Wert zurück
SET sql_mode = @@GLOBAL.sql_mode;
SELECT @@sql_mode, @@GLOBAL.sql_mode;
+----------------------------------------------+----------------------------------------------+
| @@sql_mode | @@GLOBAL.sql_mode |
+----------------------------------------------+----------------------------------------------+
| NO_AUTO_VALUE_ON_ZERO,NO_ENGINE_SUBSTITUTION | NO_AUTO_VALUE_ON_ZERO,NO_ENGINE_SUBSTITUTION |
+----------------------------------------------+----------------------------------------------+
sql_mode
Verwenden Sie die Option in der Befehlszeile oder in einer Optionsdatei wie my.cnf (Unix-Betriebssysteme) oder my.ini (Windows), um den SQL-Modus beim Serverstart festzulegen. [sic]
--sql-mode="modes"
sql-mode="modes"
Bitte sehen Sie Ihre Version von MySQL die unterstützten und Standard bestimmen Modi .
[mysqld]
sql-mode="NO_ENGINE_SUBSTITUTION" #default <= 5.7.4
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
ONLY_FULL_GROUP_BY STRICT_TRANS_TABLES NO_ZERO_IN_DATE NO_ZERO_DATE ERROR_FOR_DIVISION_BY_ZERO NO_ENGINE_SUBSTITUTION
MySQL> = 5.7.8, <= 8.0.4
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
MySQL 5.7.7
ONLY_FULL_GROUP_BY STRICT_TRANS_TABLES NO_AUTO_CREATE_USER NO_ENGINE_SUBSTITUTION
MySQL> = 5.7.5, <= 5.7.6
ONLY_FULL_GROUP_BY STRICT_TRANS_TABLES NO_ENGINE_SUBSTITUTION
MySQL> = 5.6.6, <= 5.7.4
NO_ENGINE_SUBSTITUTION
MySQL <= 5.6.5
''
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 ein
[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 meiner doctrine.local.php hinzugefü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.
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 Textfeld
zB kopiere dies:
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 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:
# 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 wieder hoch/etc/
Geben Sie WHM ein und gehen Sie zu "WHM> Dienste neu starten> SQL Server (MySQL)" und starten Sie den Dienst neu
Ich arbeite mit MySQL und bin beim Root-Benutzer registriert. Die Lösung, die für mich funktioniert, ist die folgende:
mysql> SET SESSION sql_mode = (SELECT REPLACE (@@ sql_mode, 'ONLY_FULL_GROUP_BY', ''));
Dies ist eine dauerhafte Lösung für MySql 5.7+ unter 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 fehlerfrei anmelden können, sollten Sie jetzt fertig sein.
Sie können es mithilfe der Konfigurationsdatei deaktivieren my.cnf
:
$ mysql --verbose --help | grep my.cnf
In macOS 10.12 ist es also bei 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"
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.
SET sql_mode = ''
?