Pokud byla vaše aplikace napsána pro starší verze MySQL a není kompatibilní s přísným režimem SQL v MySQL 5.7, můžete přísný režim SQL zakázat. Například aplikace jako WHMCS 6 a Craft 2 nepodporují striktní režim SQL.
Pokud používáte WHMCS 7, přečtěte si náš článek o přizpůsobení MySQL pro WHMCS 7.Chcete-li zakázat přísný režim SQL, připojte SSH na váš server jako root a vytvořte nový konfigurační soubor pomocí nano nebo editor dle vašeho výběru:
sudo nano /etc/mysql/conf.d/disable_strict_mode.cnf
Do souboru zadejte tyto dva řádky:
[mysqld] sql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Uložte soubor stisknutím CTRL + X , pak y a poté ENTER pro potvrzení změn.
Nakonec restartujte MySQL pomocí tohoto příkazu:
sudo service mysql restart
Tato změna zakáže dvě nastavení režimu SQL, STRICT_TRANS_TABLES a ONLY_FULL_GROUP_BY, která byla přidána do MySQL 5.7 a způsobují problémy u některých starších aplikací.
Potvrzení, že je přísný režim SQL zakázán
Přísný režim SQL můžete potvrdit spuštěním tohoto příkazu jako root :
sudo mysql -i -BN -e 'SELECT @@sql_mode' | grep -E 'ONLY_FULL_GROUP_BY|STRICT_TRANS_TABLES'
Pokud je přísný režim zakázán, neuvidíte žádný výstup tohoto příkazu.
Pokud vám deaktivace přísného režimu způsobuje nějaké problémy, můžete jej znovu povolit odstraněním tohoto souboru a restartováním MySQL znovu.
Jak vypadají chyby striktního režimu SQL
Pokud vaše aplikace není kompatibilní s přísným režimem SQL, často se zobrazí chyby SQL, například:
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