Ter o apelido “Null” pode dar-lhe problemas!
Há aqueles nomes que todos pensamos "Ninguém tem este nome", certo? E nunca esta frase se aplicou tanto a um problema.
Nomes esquisitos existem em toda a parte, mas ter um apelido que não nos deixa fazer a nossa vida de forma normal, é caricato.
O casal de apelido Null (nulo em Português) não tem a vida facilitada no que toca a qualquer coisa que queiram fazer online.
Podemos pensar apenas em redes sociais, no entanto basta este casal querer aceder a um site oficial e caso este peça o nome real destes dois utilizadores... os problemas começam.
Mas Jennifer não foi enganada pelo marido, este avisou-a que se ela aceitasse utilizar o nome do, na altura, futuro marido iria ter algumas chatices.
On one hand it’s frustrating for the times that we need it, but for the most part it’s like a fun anecdote to tell people. We joke about it a lot. It’s good for stories.
A questão é simples, o apelido deste casal é a mesma palavra que indica um valor nulo ou inexistente numa base de dados.
Mas Jennifer Null não se deixa intimidar e tirando os momentos em que necessitam de algo importante, este casal leva o seu nome como uma anedota, tal como o própria refere.
O casal Null (nulo) tem ainda um filho, que como é de esperar também tem o mesmo apelido. A questão é que, como sabemos, a Internet é cada vez mais uma ferramenta para o futuro tal como qualquer aparelho tecnológico e por isso este pequeno "Nulo" poderá não gostar desta situação.
Há nomes divertido, mas este é sem dúvida um apelido que dá dores de cabeça para qualquer pessoa que goste de tecnologias.
Este artigo tem mais de um ano
“Null” != Null
exactamente, e até no exemplo da imagem… se o valor passado na string for o de uma textbox, o que normalmente é, será sempre no mínimo “”, e se for passado “Null” numa string é sempre diferente do Null… acho um problema estranho mas pronto… cada um com os seus bugs…
Textbox.toString();
nfvp, estava pensando nisso o tempo todo
Estava a pensar se era o único que estava a concluir que string “NULL” é diferente de NULL…
Na programação sim tens razão, mas muitos softwares de gestão de dados se escreveres null, as vezes realmente interpreta como null e não “null”
Em que SW de gestão de dados é que isso acontece?
MySQL Workbench há uma ou outra versão atras, editar uma tabela e escrever null aparecia um “prompt” a perguntar se queria antes inserir “null”, ignorando isso depois o campo simplesmente fica vazio…
E quem é que em sistemas de gestão de clientes/pessoas altera um valor de uma coluna directamente ‘à lá Excel’, em vez de utilizar a linguagem própria – SQL? Ou até um front-end?
Por exemplo, este problema acontece se executares uma string como instrução, num Stored procedure em SQL.
Tal como este exemplo, há muitos outros em que a string “NULL” pode ser confundida com o valor NULL
Não se o código não comparar tipos. Muita gente usa == em vez de === quando === é necessário para evitar isto.
Há muito mundo para além do PHP…
+1
ou um !name.isEmpty() também pode resolver o problema
e em javascript é usar === em vez de ==, por aí talvez haja problemas, porque nem toda a gente usa o ===
Há muito mundo para além do PHP ou JAVASCRIPT…
Exacto “Null” != Null
E penso que “Nome dos Null” !=”Null”.
Penso eu de que.
E se o meu nome fosse Marco ‘; DROP TABLES *’ ?
loooool
Best Comment!
Adorei!
LOL
loool, mas 90% não deve ter percebido a piada….
conta aí entao
SQL injection
5*
https://xkcd.com/327/
oh valha-me nossa senhora…
NULL é uma indefinição.. um valor não definido.. que não se sabe. (e não é igual a string vazia!)
por outro lado.. uma string “NULL” é um “texto” bem definido.. com as letras N U L L …
portanto, nunca o valor “NULL” vai ser tratado como o NULL usado nas bases de dados.. tal como já dito.. “NULL” não é igual a NULL
É isso mesmo Rui LUX, até eu que não percebo nada de programação sei isso 🙂
Errado, experimenta efectuar um EXEC() duma string composta, num SP em SQL server… vais ter uma surpresa
só uso Oracle.. por isso não posso comentar.. mas se em SQL Server “NULL” e null.. são confundidos.. então fico muito contente de já não usar SQL Server há mais de 10 anos 😉
o problema aí não é do SQL Server.. é do programador.. (..como de costume 😀 )
NUNCA se deve (ou é de evitar a todo o custo) usar strings para “montar” queries.. sejam SELECTs.. ou UPDATES, DELETES.. as queries devem ser FIXAS e usar BIND VARIABLES. tipo.. SELECT * FROM tbl WHERE col = ?; desta forma… nunca um “NULL” string vai ser confundido com um NULL real.. nem vai ser possivel fazer SQL injection.. tipo ” ‘a’ or 1 = 1;” .. ou ” 1; drop table blablabla.. ..”
em java , um resultset que tenha campos a null na base de dados , os campos veem com valor “null” no seu conteudo … e como é óbvio tem se ser validado ..
exemplo :
if (colValue.equals(“null”))
continue;
” até eu que percebo alguma coisa de programação sei isso”
o teu java deve ser especial.. 😀
o “meu” java tem isto.. e claro.. null sem aspas:
if ( value.isEmpty() || value.equals(null) ) {
…
}
Podes dominar o Oracle, mas de Java não deves ser grande entendido.
value.equals(null) -> Nunca é verdadeiro, NUNCA!!!!
só assim:
value==null
Pequena explicação para não ficares a queimar os neurónios:
Se “value” é um objeto e “equals” um método desse objeto, gostava de saber que “jvm” usas que chama um método de um objeto que é(ou pode ser) null, porque caso seja null, rebenta logo uma excepção.
É um facto: Eu de java percebo pouco. Ponto. Mas volta e meia tenho de olhar para código java.. Para ver o que lá andam a fazer.. Deves ter razão.. Amanhã vou ver se me lembro se perguntar lá aos java “experts” o porquê do value.equals(null)
Bruno.. esta foi a explicação que me deram (relativamente ao código que eu coloquei aqui): os métodos “isEmpty” e “equals” estão overriden.. e o que fazem é, neste caso (object value da class xpto..), é verificar uma X propriedade do objecto e ver se realmente está a null ou se está vazia.. a tal propriedade X (ou lá qual ùe o nome).. não o objecto em si. lá está.. para mim que não sou expert java.. isto faz sentido.. Bruno, tb faz sentido para ti?
O método equals deve estar reescrito, claro, tal como o HashCode, mas mesmo assim não faz sentido. Se o resultSet retornar um Null, pergunta aos “experts” como é que chamam o método “equals” de um objeto null.
Quando reescrevemos o equals, a primeira coisa que se faz é verificar se o objeto recebido é null e retornar false.
value==null -> compara o endereço de memória. Se for null não aponta para nada.
value.equals(null) -> Compara objetos. Estão a tentar verificar se o value é null ???? Se fôr, reventa logo, porque estão a chamar um metodo de um objeto null.
pahh.. rebentar não rebenta.. se não já alguém tinha reportado o bug.. não vou estar a melgar mais os gajos do java.. já estão a olhar para mim de lado por estar a fazer perguntas sobre o código deles 😀 hehe.. concluindo.. isso é lá com eles.. da minha parte, o que posso dizer é que é Oracle (tal como em todas as bds.. espero eu), um NULL é um NULL e uma ‘NULL’ é um texto, string, varchar, char.. o que lhe quiserem chamar.. mas nunca ‘NULL’ vai ser reconhecido como NULL.. e portanto, pelo menos aqui, a família Null pode estar descansada 😀 hehehe
e claro.. as “minhas” bases de dados (Oracle).. nunca me devolveram “NULL” em vez de NULL.. se é que me faço entender..
só mais um detalhe.. NULL == NULL é falso.. já que um NULL é um valor indeterminado.. e por isso não se pode afirmar que dois valores indeterminados sejam iguais..
um bem haja a todos!
“if ( value.isEmpty() || value.equals(null) ) “–> completamente diferente de if (colValue.equals(“null”)) ,
estou te tentar dizer que eu obtenho o conteudo “null” dentro de campos que estão a null na base de dados .. tu estar a tentar testar se algo é null
…mas fica lá com o teu java que eu fico com meu … se isso te faz feliz …
“if ( value.isEmpty() || value.equals(null) ) “–> completamente diferente de if (colValue.equals(“null”)) ,
estou te tentar dizer que eu obtenho o conteudo “null” dentro de campos que estão a null na base de dados .. tu estar a tentar testar se algo é null
…mas fica lá com o teu java que eu fico com meu … se isso te faz feliz …
epahh.. tem lá calma.. não é preciso entrar em stress.. mas diz-me lá.. porque raio é que a base de dados devolve “null” em vez de null.. e que base de dados é essa?
fica em paz com o teu java
na verdade eu só uso Oracle.. PL/SQL e SQL.. estou-me mais ou menos a borrifar para o java.. mas tenho tb aqui umas “cenas” no trabalho em java.. e sei ler 😀
fica em paz tb 🙂
Isto é um problema em sistemas que fazem a validação de um objecto vazio ou nulo de forma incorrecta. Ter name = “NULL” é diferente de name = NULL.
Se estiver implementado como está apresentado no exemplo não há qualquer problema com o apelido “NULL”
A culpa não é do apelido, é dos maus programadores que há por aí que não sabem o que estão a fazer…
Eu não conheço todas as linguagens, obviamente, principalmente as de scripting, mas não estou a ver a linguagem em que isto aconteceça ” if name = Sergio”. Haverá sempre aspas,plicas, ou outro delimitador.
No entanto, não ponho de parte que isso possa acontecer em alguma linguagem ou em alguma particularidade de código.
o código da imagem vai dar erro a compilar, ‘name’ undefined
o exemplo não faz sentido. O null é um estado. Sendo que para uma string “null” nunca será igual a null. Mas o problema pode realmente acontecer. Por exemplo em PHP:
$SQL=”select * from tabela where nome = $nome”;
No exemplo anterior poderá mesmo dar asneira em alguns SGBD’s.
$SQL=”select * from tabela where nome = ‘”.$nome.”‘”;
Já assim teremos o problema resolvido.
$nome = ‘; drop table tabela; —
nunca se deve concatenar um statement, use named parameters ou um ORM
se mais do que uma query por statement estiver bloqueada pode optar-se por usar
$nome = ‘ or 1=1 —
Muito comum conseguir fazer login sem saber a password com este simples inject
Lol, não me digas que é assim que executas as queries. Lamento informar-te mas estas estão vulneráveis.
Alem de que, nas BD (ex. Microsft SQL) o campo de texto fica como “NULL” não como “Null” nome dos senhores , ou seja e um Null de texto e não um null/void
Penso que onde devem existir problemas é em bases de dados onde não é feito o parse correctamente entre os inputs dos users. Não necessariamente ao nivel de software.
Cheira-me que existe aqui muito pessoal que gosta de usar strings magicas, nesse tipo de validações validam-se objectos ou variaveis if(nome == nomeIntroduzido) ou if(nome.equals(nomeIntroduzido)), ou outra cena do género e se for preciso, até passa nestas validações, e o campo de base de dados é apenas varchar, ne sequer é not null, e quando se passa um parametro para a query se este for null mesmo no varchar da bd ela vai escrever null e não “null”, quando se faz o select para ler os dados de volta, pode vir um null e rebentar com alguma coisa na lógica, podem ser sistemas antigos que nao controlam nada disso
Claramente quem escreveu esta notícia, não percebe minimamente de programação, uma coisa é obter um resultado nulo de algo, outra coisa é escrever lá e no resultado ir buscar por algo %null%.
Caro João Pereira,
Agradeço desde já o seu comentário, por acaso, até poderia dizer se percebo ou não de programação. Não o vou fazer, simplesmente porque (e caso tenha interesse) irá perceber que no artigo em si não se fala de programação. Aliás, o tema é “humor”….
Programação começou a ser falada nos comentários e de forma extremamente inteligente por parque de alguns comentadores. Os quais agradecemos a participação 🙂
Até a história original (que não refere) tem mais piada…
https://www.reddit.com/r/ProgrammerHumor/comments/4c8h98/i_legally_changed_my_last_name_to_null_about_a/
Só é pena essa não ser a história original 🙂
Pelo menos, a pesquisa deste artigo não é essa história.
Suponho que seja um excerto do artigo da BBC (uma vez que eles mencionam mais historias) mas deveriam pelo menos fazer referencia à fonte e ao autor do artigo (Chris Baraniuk), o trabalho de pesquisa e construção do artigo foi feito pelo autor original para a BBC e aqui apenas foi feita uma tradução e publicação relativa a esse artigo original. Um paragrafo a mencionar o trabalho original, o que realmente publicou esta historia não ficaria nada mal, pelo contrario.
Possivelmente a BBC terá feito, sim. Mas, por acaso, a pesquisa também não foi por aí. Foram dadas a conhecer algumas histórias com nomes estranhos e as implicações, o casal Null era um deles.
Mas não digo ser impossível a base do que encontramos ser desse artigo da BBC. Se quiser poderá deixar o link 🙂
Independentemente do site do qual foi recolhida a informação, o artigo original é da BBC, deixo o link do trabalho.
http://www.bbc.com/future/story/20160325-the-names-that-break-computer-systems?ocid=global_future_rss
Ter o apelido “Null” “”” PODE “”” dar-lhe problemas!
Acho que o titulo diz tudo.
+1
E alguns até já estavam quase a fazer projetos nas caixas de comentário…
O artigo é claro “A questão é simples, o apelido deste casal é a mesma palavra que indica um valor nulo ou inexistente numa base de dados.”
Antes de mandar postas de pescada experimentem colocar num campo de texto no MS SQL server NULL e entendem.
Eu não trabalho com MS SQL Server… mas ponho as mão no fogo (ou quase) em como se eu fizer algo assim..
insert into tbl values (1, ‘NULL’); (é só um exemplo) .. e assumindo que a primeira coluna é number e a segundar é varchar.. o registo fica com um ‘NULL’ TEXTUAL.. ou seja a palava.. e não o valor indeterminado null…
Mas que grande confusão que para aqui vai.
Se tentares inserir pelo editor (Management Studio) não vai dar mas se inserires através de uma query (Insert into) funciona ás 1000 maravilhas.
Durante a pesquisa a BD sabe perfeitamente a diferença.
SELECT name FROM Table_1 where name is NULL //Forma para pesquisar campo vazio (NULL)
SELECT name FROM Table_1 where name = ‘NULL’ //Forma para pesquisar um campo com o valor ‘NULL’
Ao receberes os dados, se for NULL (vazio) recebes um objecto/string sem valor, se for “NULL” (string) recebes 1 string normal.
Não entendi. O problema acontece ou não com esse Management Studio?
No “editor gráfico” do Management Studio ao inserir NULL isso vai inserir um valor nulo/vazio na Base de Dados.
Se for por comandos SQL (forma correcta de trabalhar) tudo funciona bem.
Nao esquecer que o “editor gráfico” Management Studio é só uma ferramenta para se ter uma representação visual dos nosso dados e por isso um pouco limitado.
Por ex: dependendo da forma utilizada para visualizar os dados, um booleano pode ser apresentado como “True/False” ou como “0/1”.
Só sendo uma ferramenta da MICOsoft para fazer tamanha bobagem. Kkkkkkkkkkkk.
Já ia reclamar de que o apelido não seria grande problema, até consultar o dicionário e saber que em Portugal apelido = sobrenome (= nome de família).
Mas para não perder a ocasião, não vejo como o trecho do programa apresentado causaria o problema. Alguém sabe de um trecho de programa que cause o problema apresentado no artigo?
O “programa” apresentado é uma simples imagem de humor.
A uns tempos li está notícia na BBC e lá explica de forma mais extensa o problema desta família de forma a criticar como estão programadas as bases de dados e os forms. Eu não percebo muito de programação mas suponho que seja verdade dado a credibilidade da fonte. Também comentavam o caso de um indivíduo que o seu nome não era aceite na base de dados de um banco japonês e que tiveram que inserir manualmente os seus dados na base de dados.
Isso acontecia mais nos sistemas mais antigos, hoje em dia somente se a pessoa que está a desenvolver não perceber nada do que está a tentar fazer.
Isso é quase como permitir ataques por SQL injection, onde é inserindo comandos de SQL nas caixas de texto/pesquisa ou até mesmo no URL o sistema comer aquilo como sendo um comando e não como sendo um texto/nome
Esquecem-se da família “Nothing”! Coitados! Sempre que a aplicação corre VB.NET os “Nothing” também são prejudicados!
Este assunto está super batido, procurem sobre Null Dilemma ou procurem pelo caso do Raven Felix Null, são apenas 2 exemplos, existem muitos mais.
Uma nota importante é que na maioria dos casos o problema não é das bases de dados, é sim das aplicações desenvolvidas por programadores que não percebem de bases de dados. Basicamente as bases de dados recebem “NULL” e retornam “NULL” (string) e a aplicação é que assume que a string “NULL” é igual a NULL e isso provoca um erro na aplicação.
E não é só com o “NULL”, costuma também acontecer muitas vezes com nomes que tenham mais de 36 caracteres, entre outros casos.
Parece a história do outro que os pais lhe deram o nome de Roberto’); DROP TABLE Students;–
O meu nome e ‘drop table users e nunca tive problemas xD
Não dá problemas nos sites com código bem feito.