Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

'' e NULL

Ola pessoal,

Qual a diferença entre os inserts abaixo referente ao valor setado no campo OBSERVACOES?

INSERT INTO COMPRAS (VALOR, DATA, RECEBIDO, OBSERVACOES) VALUES (501.0, '2014-01-01', 1, '');
INSERT INTO COMPRAS (VALOR, DATA, RECEBIDO, OBSERVACOES) VALUES (502.0, '2014-01-01', 1, NULL);
4 respostas
solução

Oi John, tudo bem? A resposta pode parecer um pouco óbvia, mas se você colocar ‘’ você gravar uma informação em branco no campo (isso é uma informação) Agora se você enviar null, significa que a informação não existe.

Em outras palavras, quando a informação não existe (null) você não consegue filtra-lá na cláusula where a não ser que você informe de forma explícita que está buscando uma informação nula. (Where observacao is null). Você não consegue concatenar, somar, dividir, etc usando uma coluna nula (a não ser que você trate isso).

Aconselho a usar NULL no seu insert (ou omitir a coluna observação) por conta da performance. Uma vez que ele e desconsiderado nos casos que citei acima, acredito que banco se comporte melhor usando NULL.

Entendi.

Então é bom colocar DEFAULT ou NOT NULL no campo nesses casos né?

Valeu Rodrigo

Oi John,

Isso dependerá da sua regra de negócio. Se o campo observação pode ser nulo, você não precisará especificar nada quando estiver criando a tabela e não precisará explicitar o campo quando estiver executando um INSERT.

Exemplo:

CREATE TABLE COMPRAS
(
    COMPRAID INT(5),
    RECEBIDO INT(1),  
    OBSERVACOES VARCHAR(50)
);

//Insert com a coluna OBSERVACOES explicita:

INSERT INTO COMPRAS (COMPRAID, RECEBIDO, 
OBSERVACOES) VALUES (1,1,NULL);

/* Você também pode omitir a coluna OBSERVACOES no seu insert.
Ficará assim: */

// Insert omitindo a coluna OBSERVACOES

INSERT INTO COMPRAS (COMPRAID, RECEBIDO) VALUES (1,1);

Agora se você criar a tabela usando NOT NULL na coluna você será obrigado a preencher o campo com alguma informação:

CREATE TABLE COMPRAS
(
    COMPRAID INT(5),
    RECEBIDO INT(1),  
    OBSERVACOES VARCHAR(50) NOT NULL
);

INSERT INTO COMPRAS (COMPRAID, RECEBIDO, 
OBSERVACOES) VALUES (1,1,'');

/* Se a coluna OBSERVACOES for NOT NULL, a omissão da coluna OBSERVACOES não é permitida no INSERT*/

Muito bom a explicação! Valeu!