Mysql
 sql >> Database >  >> RDS >> Mysql

Come disabilitare la modalità SQL rigorosa in MySQL 5.7

Se la tua app è stata scritta per versioni precedenti di MySQL e non è compatibile con la modalità SQL rigorosa in MySQL 5.7, puoi disabilitare la modalità SQL rigorosa. Ad esempio, app come WHMCS 6 e Craft 2 non supportano la modalità SQL rigorosa.

Se stai utilizzando WHMCS 7, consulta il nostro articolo sulla personalizzazione di MySQL per WHMCS 7.

Per disabilitare la modalità SQL rigorosa, SSH nel tuo server come root e crea un nuovo file di configurazione usando nano o l'editor di tua scelta:

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

Nel file, inserisci queste due righe:

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

Salva il file premendo CTRL + X , quindi y , quindi INVIO per confermare le modifiche.

Infine, riavvia MySQL con questo comando:

sudo service mysql restart

Questa modifica disabilita due impostazioni della modalità SQL, STRICT_TRANS_TABLES e ONLY_FULL_GROUP_BY, che sono state aggiunte in MySQL 5.7 e causano problemi ad alcune applicazioni precedenti.

Conferma della modalità Strict SQL disabilitata

Puoi confermare che la modalità SQL rigorosa è disabilitata eseguendo questo comando come root :

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

Se la modalità rigorosa è disabilitata, non vedrai alcun output da quel comando.

Se la disabilitazione della modalità rigorosa causa problemi per te, puoi riattivarla eliminando quel file e riavviando MySQL.

Che aspetto hanno gli errori di modalità SQL rigorosi

Se la tua app non è compatibile con la modalità SQL rigorosa, vedrai spesso errori SQL come:

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