Ich habe ein Formular auf einer Website, die viele verschiedene Felder hat. Einige der Felder sind optional, während andere obligatorisch sind. In meiner DB habe ich eine Tabelle, die alle diese Werte enthält. Ist es besser, einen NULL-Wert oder eine leere Zeichenfolge in die DB-Spalten einzufügen, in die der Benutzer keine Daten eingegeben hat?MySQL, besser NULL oder leere Zeichenfolge einfügen?
Antwort
Mit NULL
können Sie unterscheiden zwischen "put no data" und "put leave data".
Einige weitere Unterschiede:
A
LENGTH
vonNULL
istNULL
, einLENGTH
eines leeren String ist0
.NULL
s werden vor den leeren Strings sortiert.COUNT(message)
werden leere Strings zählen aber nichtNULL
sSie für eine leere Zeichenkette suchen können eine gebundene Variable aber nicht für einen
NULL
. Diese Abfrage:SELECT * FROM mytable WHERE mytext = ?
wird nie ein
NULL
inmytext
, entspricht, den Wert, den Sie von dem Client übergeben. UmNULL
s zu entsprechen, müssen Sie andere Abfrage verwenden:SELECT * FROM mytable WHERE mytext IS NULL
Ich weiß nicht, was am besten Praxis wäre hier, aber ich würde irren generell für die Null, wenn Sie null wollen etwas anderes als leerer String bedeuten, und die Eingabe des Benutzers stimmt mit der Definition für leere Zeichenfolgen überein.
Beachten Sie, dass ich sage, dass Sie definieren müssen, wie Sie möchten, dass sie anders sind. Manchmal macht es Sinn, sie anders zu haben, manchmal nicht. Wenn nicht, wählen Sie einen aus und bleiben Sie dabei. Wie gesagt, ich bevorzuge die NULL die meiste Zeit.
Oh, und bedenken Sie, dass, wenn die Spalte null ist, der Datensatz in praktisch keiner Abfrage erscheint, die aus dieser Spalte (hat eine Where-Klausel, in SQL-Begriffen) basiert, sofern die Auswahl ist für eine Null-Spalte natürlich.
... Und jetzt, wo ich die Antwort über mir sehe, denke ich, dass es sicher ist, dass die übliche Unterscheidung, die Sie interessieren würden, keine Daten gegen leere Daten ist. :-) –
Eine Sache zu prüfen, wenn Sie jemals Plan auf den Wechsel von Datenbanken planen, ist das Oracle does not support empty strings. Sie werden automatisch in NULL konvertiert, und Sie können sie nicht mit Klauseln wie WHERE somefield = ''
abfragen.
Das klang unglaublich fischig für mich, sogar auf deinem Link, also habe ich es versucht. Nullfeld, gesetzt auf '', Orakel ignoriert es. Gibt die Länge als null statt als 0 an. Das ist einfach falsch. Es muss einen Weg geben. Denke, ich poste das als eine andere Frage. –
'Steve B.': siehe diese Frage: http://stackoverflow.com/questions/1171196/difference-between-varchar-and-varchar2 – Quassnoi
Danke für die Referenz, obwohl ich die Argumentation immer noch nicht verstehe. Gepostet als http://stackoverflow.com/questions/1268177/oracle-not-differencing-between-nulls-and-empty-strings –
Eine Sache zu beachten ist, dass NULL Ihre Codepaths viel schwieriger machen kann. In Python beispielsweise mappen die meisten Datenbankadapter/ORMs NULL
zu None
.
So Dinge wie: "Hallo, kein Joe Doe"
print "Hello, %(title)s %(firstname) %(lastname)!" % databaserow
könnte zur Folge Um dies zu vermeiden müssen Sie so etwas wie dieser Code:
if databaserow.title:
print "Hello, %(title)s %(firstname) %(lastname)!" % databaserow
else:
print "Hello, %(firstname) %(lastname)!" % databaserow
Welche Dinge viel komplizierter machen.
Meiner Meinung nach ist der Missbrauch Ihrer Datenbank, um Fehler in Ihrem Code oder dem Framework zu "reparieren", eine (sehr) schlechte Programmierpraxis. Wenn keine Daten vorhanden sind, sollten Sie einfach NULL einfügen und konsistent sein. Andernfalls müssen Sie folgende Anweisungen verwenden: if (myString == null || myString = ""). Wenn ein Objekt nicht in Ihrem Code festgelegt oder definiert ist, verwenden Sie auch NULL statt irgendeiner Art von "Platzhalter" (was meiner Meinung nach eine leere Zeichenfolge ist). – Gertjan
Hängt sehr von Ihrer Sprache der Wahl ab. In Python testet "if not myString:" auf None und "". Wahrscheinlich hauptsächlich ein kulturelles Thema. Die "schlechte Praxis" der Java-Kerle ist die Eleganz der dynamischen Person. – max
Besser zum Einfügen NULL
für Konsistenz in Ihrer Datenbank in MySQL. Fremdschlüssel können als NULL
aber NICHT als leere Zeichenfolgen gespeichert werden.
Sie werden Probleme mit einer leeren Zeichenfolge in den Einschränkungen haben. Sie müssen möglicherweise einen falschen Datensatz mit einer eindeutigen leeren Zeichenfolge einfügen, um eine Fremdschlüsseleinschränkung zu erfüllen. Schlechte Praxis, denke ich.
Siehe auch: Can a foreign key be NULL and/or duplicate?
ich über die Leistung nicht kennen. Aber im Hinblick auf die Datenqualität ist null schlecht.
Null gibt Ihnen den Typ maybe
, der Sie zwingt, Laufzeittypprüfung zu schreiben wie: something = a.b.c.d.something if exist?(a) && exist?(a.b) && exist?(a.b.c) && exist?(a.b.c.d) && exist?(a.b.c.d.something)
.
Dieses Problem könnte gemildert werden, wenn Sie keine json/hash/array-Formate verwenden.
- 1. Welcher steht für null? undef oder leere Zeichenfolge
- 2. Initialisierung Zeichenfolge als null gegen leere Zeichenfolge
- 3. Leere POST-Zeichenfolge als Null in MySQL Einfügen obwohl Spalte gesetzt
- 4. UITextField: Test Text-Eigenschaft für leere Zeichenfolge oder Null oder Null funktioniert nicht
- 5. Leeres Textfeld wird eine leere Zeichenfolge oder null
- 6. While-Schleife - zwei Bedingungen: leere Zeichenfolge "" oder null von Eingabeaufforderung
- 7. MYSQL: Wie man NULL oder leere Daten beim Einfügen auf 0 setzt
- 8. sas einfügen leere roh in null-Datensatz
- 9. MySQL, wie Null Daten einfügen
- 10. Sollte ich NULL oder eine leere Zeichenfolge verwenden, um keine Daten in der Tabellenspalte darzustellen?
- 11. Leere Zeichenfolge statt NULL-Werte Eloquent
- 12. Redis "Null" oder "leere Liste oder Set"
- 13. Betrachtet elasticsearch leere Zeichenfolge als null?
- 14. JAXB gibt null anstatt leere Zeichenfolge zurück
- 15. Leerzeichen als NULL in MySQL einfügen
- 16. leere Zeichenfolge in Oracle
- 17. Jackson Serialisierung: leere Werte (oder null) ignorieren
- 18. Testen für leere oder nullwertige Zeichenfolge
- 19. MySQL schließt NULL/leere Übereinstimmung aus?
- 20. Kopieren Sie leere Zeichenfolge mit Clipboard.SetText (Zeichenfolge)
- 21. PyMySQL Einfügen NULL oder ein String
- 22. Leere Zeichenfolge in INT-Spalte für SQL Server einfügen
- 23. Kann MySQL leere Strings automatisch in NULL konvertieren?
- 24. Warum $ '\ 0' oder $ '\ x0' ist eine leere Zeichenfolge? Sollte der Null-Charakter sein, oder?
- 25. NULL-Wert in MySQL einfügen, von Coldfusion
- 26. Python - Wie NULL Mysql-Werte einfügen
- 27. django Vorlage Displaywert oder eine leere Zeichenfolge
- 28. Regex oder leere Zeichenfolge funktioniert nicht
- 29. Kann ich eine leere Zeichenfolge in ein Feld NOT NULL einfügen?
- 30. ?? Koaleszieren für leere Zeichenfolge?
aber was denkst du ist schneller? 0 oder NULL oder "" –
@aadravid: kein Unterschied. – Quassnoi
in InnoDB NULL nehmen weniger Platz –