Para poder suportar um fácil tratamento de tabelas não transacionais todos os campos no MySQL têm valores padrão.
          Se você inserir um valor 'errado' em uma coluna como um
          NULL em uma coluna NOT
          NULL ou um valor numérico muito grande em um campo
          numérico, o MySQL irá atribuir a coluna o 'melhor valor
          possível' em vez de dar uma mensagem de erro. Para strings
          este valor é uma string vazia ou a maior string possível que
          possa estar na coluna.
        
          Isto significa que se você tentar armazenar
          NULL em uma coluna que não aceita valores
          NULL, o MySQL Server armazenará 0 ou
          '' (strig vazia) nela. Este último
          comportamento pode, para uma simples inserção de registro,
          ser alterado com a opção de compilação
          -DDONT_USE_DEFAULT_FIELDS.) See
          Secção 2.3.3, “Opções típicas do configure”. Isto faz com que as
          instruções INSERT gerem um erro a menos
          que você explicite valores específicos para todas as colunas
          que exigem um valor diferente de NULL.
        
A razão para as regras acima é que não podemos verificar estas condições antes da consulta começar a executar. Se encontrarmos um problema depois de atualizar algumas linahs, não podemos fazer um rollback já que o tipo de tabela não suporta isto. A opção de parar não é tão boa como no caso em que a atualização esteja feita pela metade que é provavelmente o pior cenário possível. Neste caso é melhor 'fazer o possível' e então continuar como se nada tivesse acontecido. No MySQL 5.0 plenejamos melhorar into forncendo avisos para conversões automáticas de campo, mais uma opção para deixar você fazer um rollback das instruções que usam apenas tabelas transacionais no caso de tal instrução fizer uma definição de campo não permitida.
O mostrado acima significa que não se deve usar o MySQL para verificar o conteúdo dos campos, mas deve se fazê-lo por meio da aplicação.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.

