O MySQL alterou o valor padrão da variável sql_mode desde lançamentos anteriores que está quebrando o código existente em várias aplicações. Este tutorial explica como alterar o sql_mode de acordo com os recursos do aplicativo. Ele também fornece as etapas para preservar esse valor na reinicialização do servidor.
Observações :Você também pode seguir os tutoriais do MySQL - Como instalar o MySQL 8 no Ubuntu, Como remover completamente o MySQL do Ubuntu e aprender consultas básicas de SQL usando o MySQL.
O valor padrão da variável sql_mode no MySQL 8 é mostrado abaixo.
# Default - sql_mode
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
No meu caso a opção ONLY_FULL_GROUP_BY está quebrando o código, portanto, vou removê-lo para demonstração
Atualizar diretamente
Podemos atualizar diretamente o valor de sql_mode usando os comandos como mostrado abaixo.
# Login
mysql -u root -p
# Globally
SET GLOBAL sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION";
# Session
SET SESSION sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION";
O valor sql_mode será alterado usando as consultas mencionadas acima. O problema é que a variável recupera seu valor padrão na reinicialização do servidor. Podemos preservar o valor como mostrado na próxima seção.
Atualizar permanentemente
Podemos preservar o valor de sql_mode atualizando my.cnf Arquivo. A localização desse arquivo difere com base no ambiente e na versão do servidor. Os locais mais comuns desse arquivo incluem/etc/my.
No Linux Mint 18 , o local do arquivo é /
# Search the default config
mysqld --verbose --help | grep -A 1 "Default options"
# Output
Default options are read from the following files in the given order: /etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf
O servidor MySQL examinará os locais mencionados acima para as configurações padrão tanto no nível do sistema quanto no nível local. Atualize o arquivo my.cnf conforme mostrado abaixo. Eu usei o editor nano para demonstração
# Update my.cnf
sudo nano /etc/mysql/my.cnf
# Scroll down and update the file as shown below
...
...
# # The MySQL Server configuration file. # # For explanations see # http://dev.mysql.com/doc/mysql/en/server-system-variables.html # * IMPORTANT: Additional settings that can override those from this file! # The files must end with '.cnf', otherwise they'll be ignored. # !includedir /etc/mysql/conf.d/ !includedir /etc/mysql/mysql.conf.d/ [mysqld] sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"
Agora salve o arquivo e saia do editor. Certifique-se de incluir [mysqld] acima da variável.
Reinicie o servidor MySQL para definir o valor da variável sql_mode conforme configurado por nós no arquivo my.cnf como mostrado acima.
# Using init
sudo /etc/init.d/mysqld restart
# OR
sudo /etc/init.d/mysql restart
# Using service
sudo service mysql restart
# Using systemd
sudo systemctl restart mysqld.service
# OR
sudo systemctl restart mysql
Resumo
Neste tutorial, atualizamos o valor da variável MySQL sql_mode e também o preservou permanentemente na reinicialização do servidor.