Ich habe diesen Artikel auf BBC gelesen . Es erzählt die Geschichte einer Person namens Jenifer Null und wie sie mit alltäglichen Problemen konfrontiert ist, wenn sie Online-Datenbanken wie die Buchung von Flugtickets, Net Banking usw. nutzt.
Ich kenne mich mit Datenbanken nicht gut aus und benutze sie nicht sehr oft. Als ich eine Website zum Lernen erstellte, verwendete die serverseitige Formularüberprüfung reguläre Ausdrücke. Soweit ich mich erinnere, würde es gerne den Namen "Null" annehmen. Ich habe es aber nicht ausprobiert.
Könnte jemand die technischen Details erklären, wann diese Situation eintreten würde? Funktioniert die Formularvalidierung nur so string == NULL
oder so? Trotzdem denke ich nicht NULL is same as "NULL"
.
null
database-agnostic
Souradeep Nanda
quelle
quelle
Antworten:
Ich habe Datenbankschnittstellen (z. B. Framework-Bibliotheken) gesehen, die 'null' als Zeichenfolge für Nullspalten zurückgeben. Ich glaube, es gab eine Flagge, die dies zum Debuggen ein- oder ausschalten würde. Mit diesem Flag können Entwickler auf einfache Weise feststellen, ob das leere Feld das Ergebnis eines Nullwerts oder eines leeren Werts war. Dies ist eine schlechte Einstellung, insbesondere in der Produktion, und würde die im Artikel erläuterten Probleme erklären.
Die umgekehrte Verarbeitung der Konvertierung von 'null' in einen Nullwert sollte einen Anwendungsfehler für ein Namensfeld erzeugen. Ich würde erwarten, dass dies ziemlich schnell gelöst wird.
quelle
Es besteht eine gute Chance, dass ein guter Teil Ihrer Verwirrung vom Journalisten stammt. Der Artikel befasst sich mit Problemen bei der Verwendung ganzer Anwendungssysteme, nicht nur von Datenbanken. Völlig vernünftig, da dies eine Schrift ist, die auf den Massenkonsum abzielt, aber technische Details vom Autor beschönigt oder missverstanden werden.
Einige dieser Probleme werden wahrscheinlich eher auf der Anwendungsebene als auf der API der Datenbank verursacht. Magische Werte sind ein Anti-Muster, das in der Branche auf lächerliche Weise nur schwer auszumerzen ist. Sehr leicht hätte ein Programmierer eine Bedingung nach dem Motto "Jemand hat 'null' eingegeben? Sie müssen bedeuten, dass es keinen Wert gibt, denn das ist, was null bedeutet!" Ein irrtümlicher Versuch, die SQL-Injektion zu verhindern, könnte auch für die erwähnte Misshandlung von Null oder des hawaiianischen Nachnamens verantwortlich sein, der ein einfaches Anführungszeichen enthält, das auch das standardmäßige SQL-Zeichenfolgen-Trennzeichen ist.
Eine Anwendung, die diese Werte falsch in NULL oder eine leere Zeichenfolge umwandelt, kann leicht zu Fehlern führen, wenn Geschäftslogik- oder DB-Einschränkungen etwas anderes erwarten. Dies führt natürlich zu genau der frustrierenden Benutzererfahrung, die im Artikel beschrieben wird.
quelle
Der Artikel selbst enthält einen Link zu einer Stapelüberlauf-Frage , die das Problem veranschaulicht. Es war in einer Flex-Anwendung, in der der Code:
würde ein Element, das das Wort enthält,
Fred
an ein XML-Dokument anhängen, aber den Code:würde ein leeres Element anhängen, kein Element, das den Text "null" enthält.
XML, per se, hat kein Problem mit dem Textwert "NULL", so einschließlich solchen Text würde kein Problem sein. In der Tat
NULL
hat überhaupt keine besondere Bedeutung in XML.quelle
Eine Sache, von der ich glaube nicht gesehen zu haben, dass sie erwähnt wird: Wir sprechen nicht nur über SQL.
Der Name kann in der Datenbank beginnen / enden. Um dorthin zu gelangen, sind normalerweise MEHRERE Kanäle erforderlich. Datenbank, SQL, PHP, HTML, Javascript ... Java, C #, VB, Perl, Phython, Ruby, Bash, Batch, etc, etc, etc ...
Bei jedem dieser Schritte in der Pipeline werden möglicherweise Daten von einem Format in ein anderes konvertiert. Von SQL-Tabellen, zu JSON, zu XML, zu CSV, etc ...
An jedem Punkt in dieser komplizierten Kette wird es nur eine Stelle schlechter Programmierung oder einer Fuzzy-Programmiersprache erfordern (Javascript- Nullbehandlung zum Beispiel) ...
Beschränken Sie sich also nicht auf das Problem in der Datenbank, da es sich an einer beliebigen Stelle im "Stapel" befinden kann.
quelle
Community Wiki Antwort für die verschiedenen Links, die ursprünglich als Kommentare zu dieser beliebten Frage hinterlassen wurden
Wie verursacht ein Nachname von Null in vielen Datenbanken Probleme? (Programmierer SE)
Unwahrheiten Programmierer glauben an Namen von Patrick McKenzie
Lizenziert nach Bill von David Mikkelson (snopes.com)
Ein Codebeispiel, das dieses Problem in der Anwendungsebene verursacht.
Exploits einer Mutter - auch bekannt als Little Bobby Tables (xkcd webcomic)
quelle
Relationale Datenbanken müssen fehlende oder irrelevante Werte aufnehmen. Beispielsweise kann die Kundenliste eine Mobiltelefonnummer oder ein Geschlecht enthalten. Was ist, wenn ein Unternehmen Kunde werden möchte - welches Geschlecht sollte es haben?
Ein spezieller Indikator zeigt an, dass ein Wert fehlt. Diese spezielle Flagge ist NULL. So kann eine fehlerhafte Programmierung dazu führen, dass der Indikator für fehlende Werte - NULL - mit dem Nachnamen von Jennifer Null verwechselt wird, wobei der Nachname möglicherweise als fehlende Daten und nicht als tatsächlicher Wert interpretiert wird.
Es ist ein bisschen so, als würde man ein Bankkonto eröffnen, aber kein Geld einzahlen. Der Saldo ist Null. Dies bedeutet nicht, dass Sie kein Gleichgewicht haben. Es bedeutet, dass Sie ein Guthaben haben und der Wert "0" ist. Aber schlampige Programmierung könnte die Null als "nicht vorhanden" interpretieren und feststellen, dass Sie überhaupt kein Konto haben.
quelle
Es gibt viele schlecht geschriebene Software und sogar Frameworks, die sich bei jemandem mit dem Namen Null merkwürdig verhalten würden.
Aber vergessen wir nicht das menschliche Element: Vielleicht denken Menschen, dass es ein Fehler ist, den Namen auf Bildschirmen und Ausdrucken zu sehen, und dass das Löschen der Person eine weitere wahrscheinliche Ursache ist?
quelle