sql >> Databasteknik >  >> RDS >> Mysql

Hur man inaktiverar strikt SQL-läge i MySQL 5.7

Om din app är skriven för äldre versioner av MySQL och inte är kompatibel med strikt SQL-läge i MySQL 5.7, kan du inaktivera strikt SQL-läge. Till exempel, appar som WHMCS 6 och Craft 2 stöder inte strikt SQL-läge.

Om du använder WHMCS 7, se vår artikel om att anpassa MySQL för WHMCS 7.

För att inaktivera strikt SQL-läge, SSH in på din server som root och skapa en ny konfigurationsfil med nano eller valfri redaktör:

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

Ange dessa två rader i filen:

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

Spara filen genom att trycka på CTRL + X , sedan y , sedan ENTER för att bekräfta ändringar.

Slutligen, starta om MySQL med detta kommando:

sudo service mysql restart

Denna ändring inaktiverar två SQL-lägesinställningar, STRICT_TRANS_TABLES och ONLY_FULL_GROUP_BY, som lades till i MySQL 5.7 och orsakar problem för vissa äldre applikationer.

Bekräfta att strikt SQL-läge är inaktiverat

Du kan bekräfta att strikt SQL-läge är inaktiverat genom att köra det här kommandot som root :

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

Om strikt läge är inaktiverat kommer du inte att se någon utdata från det kommandot.

Om inaktivering av strikt läge orsakar problem för dig kan du återaktivera det genom att ta bort den filen och starta om MySQL igen.

Hur ser strikta SQL-lägesfel ut

Om din app inte är kompatibel med strikt SQL-läge kommer du ofta att se SQL-fel som:

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

  1. Upprörd med en transaktion

  2. Lär dig hur du använder CASE-sats i SQL

  3. Varför kan jag inte utföra en aggregatfunktion på ett uttryck som innehåller ett aggregat men jag kan göra det genom att skapa en ny select-sats runt det?

  4. Så här lägger du till vertikala gränser till ditt SQL*Plus / SQLcl-utmatningsnät