Jeśli Twoja aplikacja została napisana dla starszych wersji MySQL i nie jest zgodna ze ścisłym trybem SQL w MySQL 5.7, możesz wyłączyć ścisły tryb SQL. Na przykład aplikacje takie jak WHMCS 6 i Craft 2 nie obsługują ścisłego trybu SQL.
Jeśli używasz WHMCS 7, zapoznaj się z naszym artykułem na temat dostosowywania MySQL do WHMCS 7.Aby wyłączyć ścisły tryb SQL, SSH na swoim serwerze jako root i utwórz nowy plik konfiguracyjny za pomocą nano lub wybrany przez Ciebie redaktor:
sudo nano /etc/mysql/conf.d/disable_strict_mode.cnf
W pliku wpisz te dwie linie:
[mysqld] sql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Zapisz plik, naciskając CTRL + X , a następnie y , a następnie ENTER aby potwierdzić zmiany.
Na koniec uruchom ponownie MySQL za pomocą tego polecenia:
sudo service mysql restart
Ta zmiana wyłącza dwa ustawienia trybu SQL, STRICT_TRANS_TABLES i ONLY_FULL_GROUP_BY, które zostały dodane w MySQL 5.7 i powodują problemy dla niektórych starszych aplikacji.
Potwierdzanie, że ścisły tryb SQL jest wyłączony
Możesz potwierdzić, że ścisły tryb SQL jest wyłączony, uruchamiając to polecenie jako root :
sudo mysql -i -BN -e 'SELECT @@sql_mode' | grep -E 'ONLY_FULL_GROUP_BY|STRICT_TRANS_TABLES'
Jeśli tryb ścisły jest wyłączony, nie zobaczysz żadnych danych wyjściowych tego polecenia.
Jeśli wyłączenie trybu ścisłego powoduje jakiekolwiek problemy, możesz go ponownie włączyć, usuwając ten plik i ponownie uruchamiając MySQL.
Jak wyglądają ścisłe błędy trybu SQL
Jeśli Twoja aplikacja nie jest zgodna ze ścisłym trybem SQL, często zobaczysz błędy SQL, takie jak:
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