Eu estava lendo este artigo na BBC. Ele conta a história de uma pessoa chamada Jenifer Null e como ela enfrenta problemas do dia-a-dia enquanto usa bancos de dados on-line, como reservas de passagens aéreas, serviços bancários líquidos etc.
Não sou versado em bancos de dados e não o uso com muita frequência. Quando criei um site para aprendizado, a validação do formulário no lado do servidor usava expressões regulares. Pelo que me lembro, seria feliz em aceitar o nome "Nulo". Eu ainda não tentei.
Alguém poderia explicar os detalhes técnicos quando essa situação ocorreria? A validação de formulário está apenas fazendo um string == NULL
ou algo assim? Mesmo assim eu não acho NULL is same as "NULL"
.
null
database-agnostic
Souradeep Nanda
fonte
fonte
Respostas:
Eu vi interfaces de banco de dados (por exemplo, bibliotecas de estrutura) que retornam 'null' como uma string para colunas nulas. Acredito que havia uma bandeira que ativaria ou desativaria isso para depuração. Esse sinalizador permite que os desenvolvedores determinem facilmente se o campo vazio foi resultado de um valor nulo ou vazio. Essa é uma configuração ruim, especialmente na produção, e explicaria os problemas explicados no artigo.
O processamento reverso da conversão de 'nulo' em um valor nulo deve gerar um erro de aplicativo para um campo de nome. Eu esperaria que isso fosse resolvido rapidamente.
fonte
Há uma boa chance de que boa parte da sua confusão se origine da do jornalista. O artigo fala sobre problemas usando sistemas de aplicativos inteiros, não apenas bancos de dados. Completamente razoável, uma vez que se trata de um artigo que visa o consumo em massa, mas os detalhes técnicos são encobertos ou mal interpretados pelo autor.
É provável que vários desses problemas sejam causados na camada do aplicativo, e não na API do banco de dados. Os valores mágicos são um antipadrão que é ridiculamente difícil de eliminar da indústria. Muito facilmente, algum programador poderia ter escrito uma condição na mesma linha de "alguém digitado 'nulo'? Eles devem significar que não há valor, porque é isso que nulo significa!" Uma tentativa equivocada de impedir a injeção de SQL também pode ser responsável pelos maus-tratos mencionados a Null ou o sobrenome havaiano que contém uma aspas simples, que também é o delimitador de string SQL padrão.
Um aplicativo que transforma esses valores incorretamente em NULL ou em uma sequência vazia pode facilmente criar erros se a lógica de negócios ou as restrições de banco de dados esperarem algo diferente. Isso naturalmente resulta exatamente na frustrante experiência do usuário descrita no artigo.
fonte
O artigo em si inclui um link para uma pergunta de estouro de pilha que demonstra o problema; estava em um aplicativo Flex em que o código:
anexaria um elemento contendo a palavra
Fred
a um documento XML, mas o código:acrescentaria um elemento vazio, não um elemento contendo o texto "null".
O XML, por si só, não possui um problema com o valor do texto "NULL", portanto, incluir esse texto não seria um problema. De fato,
NULL
não tem nenhum significado especial em XML.fonte
Uma coisa que acho que não vi mencionada: não estamos falando apenas de SQL.
O nome pode começar / terminar no banco de dados ... mas chegar lá normalmente envolve vários canais. Banco de dados, Sql, php, html, javascript ... Java, C #, VB, Perl, Phython, Ruby, bash, lote, etc, etc, etc ...
Cada uma dessas etapas no pipeline pode envolver a conversão de dados de um formato para outro. De tabelas SQL, a json, a xml, a CSV, etc ...
Em qualquer ponto dessa cadeia complicada, será necessário apenas um ponto de programação ruim ou uma linguagem de programação difusa ( manipulação nula de Javascript, por exemplo) ...
Portanto, não se limite ao problema de estar no banco de dados ... porque ele pode estar em qualquer lugar da "pilha".
fonte
Resposta do Wiki da Comunidade para os vários links originalmente deixados como comentários sobre essa pergunta popular
Como um sobrenome Null causa problemas em muitos bancos de dados? (Programadores SE)
Programadores de falsidades acreditam em nomes de Patrick McKenzie
Licenciado para Bill por David Mikkelson (snopes.com)
Um exemplo de codificação que causará esse problema na camada do aplicativo.
Façanhas de uma mãe - aka Little Bobby Tables (xkcd webcomic)
fonte
Os bancos de dados relacionais precisam acomodar valores ausentes ou irrelevantes. Por exemplo, a lista de clientes pode incluir um número de telefone celular ou um sexo. E se uma empresa quiser se tornar um cliente - que gênero deve ter?
Um indicador especial é usado para mostrar que um valor está ausente. Este sinalizador especial é NULL. Portanto, a programação desleixada pode fazer com que o indicador de valor ausente - NULL - seja confundido com o sobrenome de Jennifer Null, talvez interpretando seu sobrenome como dados ausentes, e não como um valor real.
É como abrir uma conta bancária, mas não depositar dinheiro. O saldo é zero. Isso não significa que você não tem equilíbrio. Isso significa que você tem um saldo e seu valor é "0". Mas a programação desleixada pode interpretar mal o zero como "não existe" e determinar que você não tem uma conta.
fonte
Há muitos softwares mal escritos e estruturas pares que se comportariam estranhamente com alguém chamado Null.
Mas não vamos esquecer o elemento humano: talvez os humanos vendo o nome nas telas e nas impressões e achando que é um erro e excluindo a pessoa sejam outra causa provável?
fonte