O Valor do "NULL" no MySQL
O Conceito de valor NULL é fonte comum de confusão para os iniciantes em SQL, quem freqüentemente pensa que NULL é a mesma coisa que uma string vaiza "". Este não é o caso! Por exemplo, as seguintes sentenças são completamente diferentes:
As duas sentenças inserem um valor na coluna phone, mas a primeira insere o valor NULL e a segunda insere uma string vazia. O Siguinificado da primeira pode ser entendido como "Número de Telefone Desconhecido" e a segunda como "Não Possui Telefone".
Em SQL o valor NULL é sempre falso em comparação com qualquer outro valor, até mesmo NULL. Uma expressão que contem NULL sempre produz um valor NULL a menos que indicado de outra maneira na documentação para os operadores e as funções envolvidas na expressão. Todas as colunas do exemplo seguintes retornam NULL:
Se você quer procurar por colunas que o valor é NULL você não pode usar o teste =NULL. A sentença seguinte não retorna linha nenhuma, por que a expressão - NULL é FALSA, para qualquer expressão:
Para procurar por valores NULL você tem que usar o teste IS NULL. O exemplos seguintes mostram como buscar pelo telefone NULL e pelo telefone em branco:
Note que você pode adicionar INDICES em colunas que tem valor NULL apenas se estiver usando MySQL versão 3.23.2 ou superior e se você estiver usando tabelas do tipo MyISAM, InnoDB ou BDB. Nas versões mais antigas e em outros tipos de tabelas voc tem que declarar tais colunas como NOT NULL. Isso também significa que você não pode inserir valores NULL em colunas INDICE.
Quando lendo dados com LOAD DATA INFILE colunas vazias são inseridas com ''. Se você deseja inseri-las como NULL deve utilizar \N no arquivo texto. A palavra 'NULL' também pode ser utilizada em algumas circunstâncias. Veja a seção "LOAD DATA INFILE" na seguinte URL:
http://mysqld.active-venture.com/LOAD_DATA.html
Quando utilizando ORDER BY, todos os valores NULL são considerados como iguais.
Funções de Agragação (sumário) como COUNT(), MIN(), e SUM() ignoram valores NULL. A exceção é para COUNT(*), que conta todas as linhas e não colunas com valores individuais. Para o seguinte exemplo, a sentença retorna dois COUNTS. O primeiro com o número de linhas na tabela, e o segundo com o número de valores não NULL na coluna age:
Para ajuda com a manipulação do valor NULL você pode utilizar os operadores IS NULL e IS NOT NULL, e a funções IFNULL().
Para alguns tipos de colunas o valor NULL é manipulado de forma especial. Se vc inserir NULL na primeira coluna TIMESTAMP de uma tabela a data e hora atual serão inseridos. Se vc inserir NULL em uma coluna AUTO_INCREMENT o próximo número na sequência será inserido.
Bom é isso, o artigo original está em http://mysqld.active-venture.com/Problems_with_NULL.html
Eu já aderi ao uso do NULL em todas as situações citadas no artigo, e você?
Carlos Eduardo Langoni
mysql> INSERT INTO my_table (phone) VALUES (NULL); mysql> INSERT INTO my_table (phone) VALUES ("");
As duas sentenças inserem um valor na coluna phone, mas a primeira insere o valor NULL e a segunda insere uma string vazia. O Siguinificado da primeira pode ser entendido como "Número de Telefone Desconhecido" e a segunda como "Não Possui Telefone".
Em SQL o valor NULL é sempre falso em comparação com qualquer outro valor, até mesmo NULL. Uma expressão que contem NULL sempre produz um valor NULL a menos que indicado de outra maneira na documentação para os operadores e as funções envolvidas na expressão. Todas as colunas do exemplo seguintes retornam NULL:
mysql> SELECT NULL,1+NULL,CONCAT('Invisible',NULL);
Se você quer procurar por colunas que o valor é NULL você não pode usar o teste =NULL. A sentença seguinte não retorna linha nenhuma, por que a expressão - NULL é FALSA, para qualquer expressão:
mysql> SELECT * FROM my_table WHERE phone = NULL;
Para procurar por valores NULL você tem que usar o teste IS NULL. O exemplos seguintes mostram como buscar pelo telefone NULL e pelo telefone em branco:
mysql> SELECT * FROM my_table WHERE phone IS NULL; mysql> SELECT * FROM my_table WHERE phone = "";
Note que você pode adicionar INDICES em colunas que tem valor NULL apenas se estiver usando MySQL versão 3.23.2 ou superior e se você estiver usando tabelas do tipo MyISAM, InnoDB ou BDB. Nas versões mais antigas e em outros tipos de tabelas voc tem que declarar tais colunas como NOT NULL. Isso também significa que você não pode inserir valores NULL em colunas INDICE.
Quando lendo dados com LOAD DATA INFILE colunas vazias são inseridas com ''. Se você deseja inseri-las como NULL deve utilizar \N no arquivo texto. A palavra 'NULL' também pode ser utilizada em algumas circunstâncias. Veja a seção "LOAD DATA INFILE" na seguinte URL:
http://mysqld.active-venture.com/LOAD_DATA.html
Quando utilizando ORDER BY, todos os valores NULL são considerados como iguais.
Funções de Agragação (sumário) como COUNT(), MIN(), e SUM() ignoram valores NULL. A exceção é para COUNT(*), que conta todas as linhas e não colunas com valores individuais. Para o seguinte exemplo, a sentença retorna dois COUNTS. O primeiro com o número de linhas na tabela, e o segundo com o número de valores não NULL na coluna age:
mysql> SELECT COUNT(*), COUNT(age) FROM person;
Para ajuda com a manipulação do valor NULL você pode utilizar os operadores IS NULL e IS NOT NULL, e a funções IFNULL().
Para alguns tipos de colunas o valor NULL é manipulado de forma especial. Se vc inserir NULL na primeira coluna TIMESTAMP de uma tabela a data e hora atual serão inseridos. Se vc inserir NULL em uma coluna AUTO_INCREMENT o próximo número na sequência será inserido.
Bom é isso, o artigo original está em http://mysqld.active-venture.com/Problems_with_NULL.html
Eu já aderi ao uso do NULL em todas as situações citadas no artigo, e você?
Carlos Eduardo Langoni