Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So deaktivieren Sie den strikten SQL-Modus in MySQL 5.7

Wenn Ihre App für ältere Versionen von MySQL geschrieben wurde und nicht mit dem strikten SQL-Modus in MySQL 5.7 kompatibel ist, können Sie den strikten SQL-Modus deaktivieren. Beispielsweise unterstützen Anwendungen wie WHMCS 6 und Craft 2 keinen strikten SQL-Modus.

Wenn Sie WHMCS 7 verwenden, lesen Sie unseren Artikel zum Anpassen von MySQL für WHMCS 7.

Um den strikten SQL-Modus zu deaktivieren, melden Sie sich per SSH als root bei Ihrem Server an und erstellen Sie eine neue Konfigurationsdatei mit nano oder den Editor Ihrer Wahl:

sudo nano /etc/mysql/conf.d/disable_strict_mode.cnf

Geben Sie in der Datei diese beiden Zeilen ein:

[mysqld]
sql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

Speichern Sie die Datei mit STRG + X , dann y , dann ENTER um Änderungen zu bestätigen.

Schließlich starten Sie MySQL mit diesem Befehl neu:

sudo service mysql restart

Diese Änderung deaktiviert zwei SQL-Moduseinstellungen, STRICT_TRANS_TABLES und ONLY_FULL_GROUP_BY, die in MySQL 5.7 hinzugefügt wurden und bei einigen älteren Anwendungen Probleme verursachen.

Bestätigen, dass der Strict SQL-Modus deaktiviert ist

Sie können bestätigen, dass der strikte SQL-Modus deaktiviert ist, indem Sie diesen Befehl als root ausführen :

sudo mysql -i -BN -e 'SELECT @@sql_mode' | grep -E 'ONLY_FULL_GROUP_BY|STRICT_TRANS_TABLES'

Wenn der strenge Modus deaktiviert ist, sehen Sie keine Ausgabe dieses Befehls.

Wenn das Deaktivieren des strikten Modus Probleme für Sie verursacht, können Sie ihn wieder aktivieren, indem Sie diese Datei löschen und MySQL erneut starten.

Wie Fehler im Strict-SQL-Modus aussehen

Wenn Ihre App nicht mit dem strikten SQL-Modus kompatibel ist, sehen Sie häufig SQL-Fehler wie:

SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #1 of
SELECT list is not in GROUP BY clause and contains nonaggregated column
'yourdbname.tblannouncements.date' which is not functionally dependent on
columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by