AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 135645
Accepted
Souradeep Nanda
Souradeep Nanda
Asked: 2016-04-19 05:13:11 +0800 CST2016-04-19 05:13:11 +0800 CST 2016-04-19 05:13:11 +0800 CST

Se o nome de uma pessoa for nulo, como isso quebraria o banco de dados?

  • 772

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 ao usar bancos de dados online como reserva de passagens aéreas, net banking etc.

Não sou muito versado em bancos de dados e não os uso com muita frequência. Quando criei um site para aprendizado, a validação do formulário do lado do servidor usava expressões regulares. Pelo que me lembro, aceitaria alegremente o nome "Null". Eu não tentei embora.

Alguém poderia explicar os detalhes técnicos quando essa situação ocorreria? A validação do formulário está apenas fazendo um string == NULLou algo assim? Mesmo assim não acho NULL is same as "NULL".

database-agnostic null
  • 7 7 respostas
  • 20936 Views

7 respostas

  • Voted
  1. Best Answer
    BillThor
    2016-04-19T05:26:22+08:002016-04-19T05:26:22+08:00

    Já vi interfaces de banco de dados (por exemplo, bibliotecas de estrutura) que retornam 'nulo' como uma string para colunas nulas. Acredito que havia um sinalizador 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.

    • 43
  2. Esoteric Screen Name
    2016-04-19T06:29:18+08:002016-04-19T06:29:18+08:00

    Há uma boa chance de que boa parte da sua confusão venha do jornalista. O artigo fala sobre problemas usando sistemas de aplicativos inteiros, não apenas bancos de dados. Completamente razoável, já que se trata de um texto voltado para o consumo de massa, mas os detalhes técnicos são encobertos ou mal interpretados pelo autor.

    Provavelmente, vários desses problemas são causados ​​na camada do aplicativo, e não na API do banco de dados. Os valores mágicos são um antipadrão ridiculamente difícil de eliminar da indústria. Muito facilmente, algum programador poderia ter escrito uma condição do tipo "alguém digitou 'nulo'? Deve significar que não há valor, porque é isso que significa nulo!" Uma tentativa equivocada de impedir a injeção de SQL também pode ser responsável pelo tratamento incorreto mencionado de Null, ou o sobrenome havaiano que contém uma aspa simples, que também é o delimitador de string SQL padrão.

    Um aplicativo que transforma incorretamente esses valores em NULL ou em uma string 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.

    • 25
  3. Dour High Arch
    2016-04-19T06:36:31+08:002016-04-19T06:36:31+08:00

    O próprio artigo inclui um link para uma pergunta do Stack Overflow que demonstra o problema; foi em uma aplicação Flex onde o código:

    currentChild.appendChild("Fred");
    

    anexaria um elemento contendo a palavra Freda um documento XML, mas o código:

    currentChild.appendChild("null");
    

    acrescentaria um elemento vazio, não um elemento contendo o texto "nulo".

    O XML, por si só, não tem problema com o valor de texto "NULL", então incluir esse texto não seria problema. Na verdade, NULLnão tem nenhum significado especial em XML.

    • 19
  4. WernerCD
    2016-04-19T17:11:24+08:002016-04-19T17:11:24+08:00

    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 MÚLTIPLOS canais. Banco de dados, Sql, php, html, javascript... Java, C#, VB, Perl, Phython, Ruby, bash, batch, etc, etc, etc...

    Cada uma dessas etapas no pipeline pode envolver a conversão de dados de um formato para outro. Desde 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 estar no banco de dados... porque pode estar em qualquer lugar da "pilha".

    • 13
  5. Paul White
    2016-04-22T00:30:00+08:002016-04-22T00:30:00+08:00

    Resposta do Community Wiki para os vários links originalmente deixados como comentários sobre esta pergunta popular

    • Como um sobrenome Nulo causa problemas em muitos bancos de dados? (Programadores SE)

    • Falsidades que os programadores acreditam sobre nomes por Patrick McKenzie

    • Licenciado para Bill por David Mikkelson (snopes.com)

    • Um exemplo de codificação que causará esse problema na camada de aplicativo.

    • Exploits of a Mom - também conhecido como Little Bobby Tables (xkcd webcomic)

    • 8
  6. Michael Green
    2016-04-19T05:33:25+08:002016-04-19T05:33:25+08:00

    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 corporação quiser se tornar um cliente - que gênero ela deve ter?

    Um indicador especial é usado para mostrar que um valor está faltando. Este sinalizador especial é NULL. Portanto, uma 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 em vez de um valor real.

    É um pouco 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. Significa que você tem um saldo e seu valor é "0". Mas uma programação desleixada pode interpretar mal o zero como um "não existe" e determinar que você não tem uma conta.

    • 4
  7. MGOwen
    2016-04-20T20:05:41+08:002016-04-20T20:05:41+08:00

    Há muitos softwares mal escritos, e até estruturas, que se comportariam de maneira estranha com alguém chamado Null.

    Mas não vamos esquecer o elemento humano: talvez os humanos vendo o nome nas telas e impressos e pensando que é um erro e deletando a pessoa seja outra causa provável?

    • 2

relate perguntas

  • Por que não devemos permitir NULLs?

  • Qual é o propósito de SET NULL em restrições de exclusão/atualização de chaves estrangeiras?

  • PostgreSQL: conta conjuntos de dados/linhas contendo valores NULL

  • NULL ou NOT NULL por padrão?

  • Quando usar NULL e quando usar uma string vazia?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve