Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como desativar o modo SQL estrito no MySQL 5.7


Se seu aplicativo foi escrito para versões mais antigas do MySQL e não é compatível com o modo SQL estrito no MySQL 5.7, você pode desabilitar o modo SQL estrito. Por exemplo, aplicativos como WHMCS 6 e Craft 2 não suportam o modo SQL estrito.
Se você estiver usando o WHMCS 7, consulte nosso artigo sobre como personalizar o MySQL para WHMCS 7.
Para desabilitar o modo SQL estrito, SSH no seu servidor como root e crie um novo arquivo de configuração usando nano ou o editor de sua escolha:
sudo nano /etc/mysql/conf.d/disable_strict_mode.cnf

No arquivo, insira estas duas linhas:
[mysqld]
sql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

Salve o arquivo pressionando CTRL + X , então s , então ENTER para confirmar as alterações.

Finalmente, reinicie o MySQL com este comando:
sudo service mysql restart

Essa alteração desabilita duas configurações do modo SQL, STRICT_TRANS_TABLES e ONLY_FULL_GROUP_BY, que foram adicionados no MySQL 5.7 e causam problemas para alguns aplicativos mais antigos.

A confirmação do modo SQL estrito está desabilitado


Você pode confirmar que o modo SQL estrito está desabilitado executando este comando como root :
sudo mysql -i -BN -e 'SELECT @@sql_mode' | grep -E 'ONLY_FULL_GROUP_BY|STRICT_TRANS_TABLES'

Se o modo estrito estiver desabilitado, você não verá nenhuma saída desse comando.

Se desabilitar o modo estrito causar algum problema para você, você pode reativá-lo excluindo esse arquivo e reiniciando o MySQL novamente.

Como são os erros do modo SQL estrito


Se seu aplicativo não for compatível com o modo SQL estrito, você verá frequentemente erros de SQL, como:
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