Como resolver a exceção do MySQL SQLSTATE[HY000]: Erro geral: 1364 O campo 'field_name' não tem um valor padrão
Saiba por que essa exceção é lançada no MySQL e como contorná-la.
O erro geral 1364 é basicamente acionado quando você tenta inserir/atualizar um registro em seu banco de dados onde um campo, ou seja, aquele que está acionando a exceção não pode ser nulo, porém você está tentando definir seu valor como nulo (você não está fornecendo um valor para ele). Normalmente, esta exceção só é acionada quando você está usando o MySQL no modo Strict , você pode obter o modo que seu servidor MySQL está usando com a seguinte consulta:
Se você enfrentar essa exceção, provavelmente é porque você tem o modo estrito ativado ( STRICT_TRANS_TABLES
). Neste artigo, compartilharemos com você duas maneiras de evitar que essa exceção apareça facilmente.
A. Solução lógica
Para evitar essa exceção, basta fornecer um valor para o campo que está acionando a exceção ou definir que o campo pode ser nulo, assim quando você tentar inserir um registro, o valor será nulo mas o erro não será lançado, por exemplo com uma coluna que não pode ser nula, a consulta a seguir lançaria a exceção:
Então você pode alterar a coluna para torná-la anulável:
E pronto, a exceção não deve aparecer mais.
B. Solução do lado do servidor
Se você não conseguir definir por si mesmo o valor da coluna porque está usando um framework ou outro tipo de lógica que primeiro insere o registro com null e depois o atualiza, você pode confiar na maneira fácil que é remover o modo estrito de MySQL. Isso de alguma forma não é recomendado, pois evita, por exemplo, a inserção de um valor vazio em uma coluna que não pode ser nula, lançando a exceção mencionada. Tudo acontece basicamente como uma medida de controle que impede que sua lógica falhe e impede que você escreva código flappy, onde você pode ignorar a lógica escrita errada etc.
Em outros casos, a lógica que você escreveu funciona em seu ambiente local, porque provavelmente você não definiu o modo estrito lá, mas em seu servidor de produção não funciona por causa desse modo. Neste caso, você pode desabilitar o strict mode modificando o arquivo de configuração do MySQL ( my.ini
no Windows ou my.cnf
no Linux) configurando o sql_mode para uma string vazia ou removendo a STRICT_TRANS_TABLES
opção que configura o MySQL em Strict Mode e tendo o NO_ENGINE_SUBSTITUTION
modo habilitado:
Salve as alterações, reinicie o serviço mysql e o erro não aparecerá mais, em vez disso, a coluna será definida como nula, embora não seja permitido.