Unterscheiden Sie zwischen Nullwert und leerem Zeichen ('') in MySQL

Unterscheiden Sie zwischen Nullwert und leerem Zeichen ('') in MySQL

Bei der täglichen Entwicklung geht es im Allgemeinen um das Hinzufügen, Löschen, Ändern und Abfragen von Datenbanken. Daher ist das Auftreten von NULL- und Leerzeichen in MySQL unvermeidlich.
Das leere Zeichen ('') und der Nullwert (null) scheinen leer zu sein, es gibt jedoch einige Unterschiede:

Definition:

  • Die Länge des Nullwertes (NULL) ist NULL und es ist nicht klar, wie viel Speicherplatz belegt ist, aber der belegte Speicherplatz
  • Die Länge einer leeren Zeichenfolge ('') beträgt 0 und nimmt keinen Platz ein.

Für Laien ausgedrückt:

Eine leere Zeichenfolge ('') ist wie ein Vakuumsauger, der nichts enthält.
Ein NULL-Wert ist wie eine mit Luft gefüllte Tasse, die aber etwas enthält.
Obwohl beide leer und transparent erscheinen, gibt es zwischen ihnen wesentliche Unterschiede.

Der Unterschied:

  1. Beim Zählen einer Spalte mittels count() werden Nullwerte ignoriert, leere Zeichen jedoch mitgezählt. Allerdings wird count(*) optimiert, um direkt die Gesamtzahl der Zeilen zurückzugeben, einschließlich Nullwerte.
  2. Um zu beurteilen, ob ein Nullwert vorhanden ist, verwenden Sie is null oder is not null . SQL kann hierfür die Funktion ifnull() verwenden. Um zu beurteilen, ob ein Nullzeichen vorhanden ist, verwenden Sie ='' oder !='' .
  3. Beim Datentyp „Zeitstempel“ ergibt das Einfügen eines Nullwertes die aktuelle Systemzeit; das Einfügen eines Leerzeichens ergibt 0000-00-00 00:00:00

Beispiele:

  • Erstellen Sie eine neue Tabelle test_ab und fügen Sie 4 Datenzeilen ein.
Tabelle erstellen test_ab (ID int,
	col_a varchar(128),
	col_b varchar(128) nicht null
);

füge test_ab(id,col_a,col_b) Werte(1,1,1) ein;
füge test_ab(id,col_a,col_b) Werte(2,'','') ein;
füge test_ab(id,col_a,col_b) Werte(3,null,'') ein;
füge test_ab(id,col_a,col_b) Werte(4,null,1) ein;

mysql> wähle * aus test_ab;
+------+-------+---------+
| ID | Spalte_a | Spalte_b |
+------+-------+---------+
| 1 | 1 | 1 |
| 2 | | |
| 3 | NULL | |
| 4 | NULL | 1 |
+------+-------+---------+
4 Zeilen im Satz (0,00 Sek.)
  • Vergleichen wir zunächst die Unterschiede zwischen den Abfragemethoden „Leerzeichen“ ('') und „Leerwert“ (null):
mysql> wähle * aus test_ab, wobei col_a = '';
+------+-------+---------+
| ID | Spalte_a | Spalte_b |
+------+-------+---------+
| 2 | | |
+------+-------+---------+
1 Zeile im Satz (0,00 Sek.)

mysql> select * from test_ab, wobei col_a null ist;
+------+-------+---------+
| ID | Spalte_a | Spalte_b |
+------+-------+---------+
| 3 | NULL | |
| 4 | NULL | 1 |
+------+-------+---------+
2 Zeilen im Satz (0,00 Sek.)

Es ist ersichtlich, dass die Abfragemethoden für null und '' unterschiedlich sind. Und die Vergleichszeichen '=' '>' '<' '<>' können nicht zum Abfragen von Null verwendet werden.
Wenn Sie nach Nullwerten suchen müssen, verwenden Sie „ist null“ und „ist nicht null“.

  • Der zweite Vergleich betrifft den Betrieb
mysql> wähle col_a+1 aus test_ab, wobei ID = 4;
+---------+
| Spalte_a+1 |
+---------+
| NULL |
+---------+
1 Zeile im Satz (0,00 Sek.)

mysql> wähle col_b+1 aus test_ab, wobei ID = 4;
+---------+
| Spalte_b+1 |
+---------+
| 2 |
+---------+
1 Zeile im Satz (0,00 Sek.)

Daraus ist ersichtlich, dass Nullwerte an keinen Berechnungen teilnehmen können, da Nullwerte bei der Teilnahme an beliebigen Berechnungen leer sind.
Deshalb ist bei der Kalkulation im Programmgeschäft besondere Aufmerksamkeit geboten.
Wenn es in die Berechnung einbezogen werden muss, müssen Sie die Funktion ifnull verwenden, um null für eine normale Berechnung in '' umzuwandeln.

  • Der dritte Vergleich ist eine statistische Größe
mysql> wähle Anzahl(Spalte_a) aus Test_ab;
+--------------+
| Anzahl(Spalte_a) |
+--------------+
| 2 |
+--------------+
1 Zeile im Satz (0,00 Sek.)

mysql> wähle Anzahl(Spalte_b) aus Test_ab;
+--------------+
| Anzahl(Spalte_b) |
+--------------+
| 4 |
+--------------+
1 Zeile im Satz (0,00 Sek.)

Daraus ist ersichtlich, dass beim Zählen die Anzahl. Nullwerte werden nicht als gültige Werte gezählt.
Wenn sum() zum Berechnen der Summe verwendet wird, wird Null ebenfalls nicht gezählt, Sie können es also verstehen.
Warum ist das Ergebnis bei der Berechnung von Null leer, aber beim Summieren mit sum() normal?

abschließend:

Versuchen Sie daher, beim Festlegen des Standardwerts nicht null als Standardwert zu verwenden. Wenn das Feld vom Typ int ist, ist der Standardwert 0; wenn es vom Typ varchar ist, wäre eine leere Zeichenfolge ('') als Standardwert besser geeignet. Standardwerte mit Null können weiterhin indiziert werden, die Effizienz wird jedoch beeinträchtigt. Wenn Sie sicher sind, dass das Feld nicht indiziert wird, können Sie es natürlich auf null setzen.

Wenn Sie ein Feld festlegen, können Sie es auf „ungleich null“ setzen, da das Konzept „ungleich null“ nicht mit dem Standardwert in Konflikt steht. Wenn wir den Standardwert auf ('') setzen, vermeiden wir zwar die Nullsituation, es ist jedoch möglich, dass dem Feld direkt ein Nullwert zugewiesen wird, sodass in der Datenbank trotzdem noch Null erscheint. Es wird daher dringend empfohlen, dem Feld nicht Null hinzuzufügen.

Etwa so:

mysql> alter table test_ab modify `col_b` varchar(128) NOT NULL DEFAULT '';
Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)
Datensätze: 0 Duplikate: 0 Warnungen: 0

mysql> desc test_ab;
+-------+--------------+------+-----+---------+---------+----------+
| Feld | Typ | Null | Schlüssel | Standard | Extra |
+-------+--------------+------+-----+---------+---------+----------+
| Ich würde | int | JA | | NULL | |
| col_a | varchar(128) | JA | | NULL | |
| col_b | varchar(128) | NEIN | | | |
+-------+--------------+------+-----+---------+---------+----------+
3 Zeilen im Satz (0,00 Sek.)

Obwohl es in Bezug auf Speicherplatz und Indexleistung möglicherweise nicht schlechter als das Nullzeichen ist, wird empfohlen, NULL nicht als Standardwert zu verwenden, um seine Besonderheiten zu vermeiden und Unsicherheit in das Projekt zu bringen.

Oben sind die Einzelheiten zur Unterscheidung zwischen Nullwerten und leeren Zeichen ('') in MySQL aufgeführt. Weitere Informationen zu MySQL-Nullwerten und leeren Zeichen finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Kennen Sie den Unterschied zwischen leerem Wert und Nullwert in MySQL
  • Spezifische Verwendung von Nullwerten und leeren Zeichen '' in MySQL

<<:  Analyse des GTK-Treeview-Prinzips und der Verwendung

>>:  Einführung in die reaktive Funktion toRef-Funktion ref-Funktion in Vue3

Artikel empfehlen

Navicat kann keine Funktionslösungsfreigabe erstellen

Als ich zum ersten Mal eine MySQL-FUNKTION schrie...

Detaillierter Prozessbericht der Vue2-Initiierungsanfragen mit Axios

Inhaltsverzeichnis Vorwort Axios-Installation und...

So deinstallieren Sie Docker Toolbox vollständig

Docker Toolbox ist eine Lösung zur Installation v...

So aktivieren Sie das Root-Konto in Ubuntu 20.04

Nach der Installation von Ubuntu 20.04 gibt es st...

Installieren Sie ein CentOS-System basierend auf WindowsX Hyper-V

Derzeit nutzen die meisten Linux-Benutzer entwede...

Detaillierte Erklärung von Prototypen und Prototypenketten in JavaScript

Inhaltsverzeichnis Prototyp-Kettendiagramm Grundl...

Empfehlen Sie einen coolen blinkenden Alarmknopf

Die Wirkung ist wie folgt: Der Code lautet wie fo...

Codebeispiel für einen einfachen UDP-Server-Client

Ich werde nicht näher auf die Theorie von UDP ein...

Fallstudie: Ajax responseText analysiert JSON-Daten

Lösen Sie das Problem, dass der vom Server nach d...

Detaillierte Erklärung des dynamischen Weihnachtsbaums durch JavaScript

Inhaltsverzeichnis 1. Animierter Weihnachtsbaum, ...