MySQL 5.5 a 5.6 – Tipo de restrição

Se você estiver atualizando o MySQL de 5.5 para 5.6, poderá encontrar alguns problemas ao tentar inserir e atualizar dados. Por exemplo, tentar inserir uma string vazia em um valor decimal pode ter funcionado para você no 5.5, mas agora joga isso no 5.6:

Incorrect decimal value: '' for column 'my_decimal_column' at row 1

O MySQL 5.6 alterou algumas de suas configurações padrão e uma dessas alterações é como a rigidez de tipo é tratada por padrão. Se você estiver enfrentando esse problema, a solução mais permanente é alterar o sql_modeem sua configuração do MySQL.

Esta é a configuração padrão para MySQL 5.6

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

Remover STRICT_TRANS_TABLESdo arquivo de configuração e reiniciar o MySQL irá forçá-lo a se comportar como 5.5 e seus problemas de rigidez serão resolvidos.

Encontrando sua configuração

A localização do arquivo de configuração depende do seu sistema operacional e de onde você instalou o MySQL. Por exemplo, em minha máquina Mac OS X, usei um utilitário chamado Homebrew para instalar o MySQL e minhas configurações estão localizadas em /usr/local/opt/mysql/my.cnf. Pesquisar o local da configuração do MySQL deve ser o suficiente para descobrir onde sua respectiva configuração ficará.

Nota

Se você deve remover esta configuração é uma questão diferente :). Depois de resolver seus problemas, é uma boa ideia reativar STRICT_TRANS_TABLESpara que você não encontre isso novamente no futuro ou quando atualizar o MySQL no futuro.