Ich weiß, dass dieses Thema ein bisschen umstritten ist und es gibt viele verschiedene Artikel / Meinungen im Internet. Leider gehen die meisten von ihnen davon aus, dass die Person nicht weiß, was der Unterschied zwischen NULL und einer leeren Zeichenfolge ist. So erzählen sie Geschichten über überraschende Ergebnisse mit Joins / Aggregaten und üben im Allgemeinen etwas fortgeschrittenere SQL-Lektionen. Auf diese Weise verpassen sie absolut den ganzen Punkt und sind daher für mich nutzlos. Hoffentlich werden diese Frage und alle Antworten das Thema etwas vorantreiben.
Nehmen wir an, ich habe eine Tabelle mit persönlichen Informationen (Name, Geburt usw.), in der eine der Spalten eine E-Mail-Adresse mit dem Typ varchar ist. Wir gehen davon aus, dass einige Personen aus irgendeinem Grund möglicherweise keine E-Mail-Adresse angeben möchten. Beim Einfügen solcher Daten (ohne E-Mail) in die Tabelle stehen zwei Optionen zur Verfügung: Setzen Sie die Zelle auf NULL oder setzen Sie sie auf eine leere Zeichenfolge (''). Nehmen wir an, ich kenne alle technischen Auswirkungen der Auswahl einer Lösung gegenüber einer anderen und kann für beide Szenarien korrekte SQL-Abfragen erstellen. Das Problem ist, dass beide Werte, auch wenn sie sich auf technischer Ebene unterscheiden, auf logischer Ebene genau gleich sind. Nachdem ich mir NULL angesehen hatte und zu dem Schluss gekommen bin, dass ich die E-Mail-Adresse des Mannes nicht kenne. Auch egal wie sehr ich es versucht habe, Ich konnte keine E-Mail mit NULL oder einer leeren Zeichenfolge senden, daher stimmen anscheinend die meisten SMTP-Server mit meiner Logik überein. Daher neige ich dazu, NULL zu verwenden, wenn ich den Wert nicht kenne und leere Zeichenfolgen für eine schlechte Sache halte.
Nach einigen intensiven Diskussionen mit Kollegen kam ich mit zwei Fragen:
Bin ich zu Recht davon ausgegangen, dass die Verwendung einer leeren Zeichenfolge für einen unbekannten Wert dazu führt, dass eine Datenbank über die Fakten "lügt"? Genauer gesagt: Wenn ich die Vorstellung von SQL von dem, was Wert ist und was nicht, verwende, könnte ich zu dem Schluss kommen: Wir haben eine E-Mail-Adresse, nur indem wir herausfinden, dass sie nicht null ist. Aber wenn ich später versuche, eine E-Mail zu senden, komme ich zu einem widersprüchlichen Ergebnis: Nein, wir haben keine E-Mail-Adresse, die @! # $ Database muss gelogen haben!
Gibt es ein logisches Szenario, in dem ein leerer String '' ein so guter Träger für wichtige Informationen sein könnte (neben Wert und ohne Wert), dass das Speichern auf andere Weise mühsam / ineffizient wäre (wie bei einer zusätzlichen Spalte). Ich habe viele Posts gesehen, in denen behauptet wurde, dass es manchmal gut ist, leere Zeichenfolgen zusammen mit realen Werten und NULL-Werten zu verwenden, aber bisher kein logisches Szenario (in Bezug auf das SQL / DB-Design) gesehen zu haben.
PS Manche Leute werden versucht sein zu antworten, dass es nur eine Frage des persönlichen Geschmacks ist. Ich stimme nicht zu. Für mich ist es eine Designentscheidung mit wichtigen Konsequenzen. Daher würde ich gerne Antworten sehen, bei denen die Meinung dazu aus logischen und / oder technischen Gründen gestützt wird.
''
auch in Oracle nicht das gleiche wie NULL
. Wenn Sie beispielsweise eine CHAR(1)
Spalte zuweisen , die der Wert ''
ergibt ' '
(dh ein Leerzeichen), nicht NULL
. Außerdem, wenn Jacek Oracle verwendet, würde diese Frage wahrscheinlich nicht einmal auftauchen :-)
'' IS NULL
sie true
in PL / SQL ausgewertet wird .