Ich glaube, dass viele Leute, die MySQL schon lange verwenden, sich über die Konzepte dieser beiden Feldattribute nicht ganz im Klaren sind. Sie haben normalerweise die folgenden Fragen:
Mein Feldtyp ist nicht null, warum Kann ich Nullwerte einfügen?
Warum ist Null nicht effizienter als Null?
Wenn wir beurteilen, dass ein Feld nicht leer ist, sollten wir * aus der Tabelle auswählen, in der die Spalte <> '' oder sollten wir „select * from table wherecolumn“ verwenden, das noch nicht null ist.
Lassen Sie uns anhand der obigen Fragen einen detaillierten Blick auf den Unterschied zwischen null und nicht null werfen.
Zuerst müssen wir die Konzepte von „Nullwert“ und „NULL“ verstehen:
Nullwert belegt keinen Platz
NULL in MySQL belegt tatsächlich Platz Ja, das Folgende ist die offizielle Erklärung von MYSQL: „NULL-Spalten benötigen zusätzlichen Platz in der Zeile, um aufzuzeichnen, ob ihre Werte NULL sind. Bei MyISAM-Tabellen benötigt jede NULL-Spalte ein Bit zusätzlich, aufgerundet.“ auf das nächste Byte."
Zum Beispiel haben Sie eine Tasse. Ein Nullwert bedeutet, dass die Tasse Vakuum ist, und NULL bedeutet, dass die Tasse mit Luft gefüllt ist. Obwohl die Tasse leer aussieht, Aber der Unterschied ist riesig.Nachdem wir die Konzepte „Nullwert“ und „NULL“ verstanden haben, ist das Problem im Grunde klar. Testen wir es anhand eines Beispiels:
CREATE TABLE `test` ( `col1` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL , `col2` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL ) ENGINE = MYISAM ;
Daten einfügen:
INSERT INTO `test` VALUES (null,1);
MySQL-Fehler aufgetreten:
#1048 - Column 'col1' cannot be null
Ein weiteres
INSERT INTO `test` VALUES ('',1);
wurde erfolgreich eingefügt.
Es ist ersichtlich, dass „NULL“ nicht in NOT NULL-Felder eingefügt werden kann, sondern nur „Nullwerte“, und die obige Frage hat die Antwort.
Was das Problem betrifft, ist NULL, wie oben erwähnt, eigentlich kein Nullwert, sondern nimmt Platz ein. Daher nimmt NULL am Feldvergleich teil, was sich teilweise auf die Effizienz auswirkt .
Und
B-Tree-Indizes speichern keine NULL-Werte. Wenn also die indizierten Felder NULL sein können, sinkt die Indizierungseffizienz erheblich.
MYSQL empfiehlt, dass Spaltenattribute so weit wie möglich NICHT NULL sindLängenüberprüfung: Beachten Sie, dass zwischen „“ von Nullwerten keine Leerzeichen stehen.
mysql> select length(''),length(null),length(' '); +------------+--------------+--------------+ | length('') | length(null) | length(' ') | +------------+--------------+--------------+ | 0 | NULL | 2 | +------------+--------------+--------------+Hinweis:
Wenn count() zum Zählen der Anzahl der Datensätze in einer Spalte verwendet wird und der NULL-Wert verwendet wird, ignoriert das System diesen automatisch , aber wenn es leer ist, wird der Wert hineingezählt.
Um NULL zu beurteilen, verwenden Sie IS NULL oder IS NOT NULL. Sie können die Funktion ifnull() in SQL-Anweisungsfunktionen verwenden, um Nullzeichen zu verarbeiten Prozess
Besondere Überlegungen für MySQL, für den Zeitstempel-Datentyp: Wenn Sie einen NULL-Wert in eine in diesen Datentyp eingefügte Spalte einfügen, ist der angezeigte Wert die aktuelle Systemzeit. Wenn Sie einen Nullwert eingeben, wird 0000-00-00 00:00:00
angezeigt. Ob zur Beurteilung des Nullwerts „is null“ oder „="“ verwendet werden soll, hängt vom tatsächlichen Unternehmen ab.
Das obige ist der detaillierte Inhalt vonWie ermittelt MySQL, ob ein Feld null ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!