NOT NULL aber er speichert trozdem ist das normal

one_o

Gesperrt
Hallo

habe grad einen schrecken bekommen,habe in der Tabelle die Einstellung NOT NULL heißt für mich die Spalte darf nicht leer sein.
(
PHP:
<?php
//Verbindungs Daten werden geladen...
require_once ('konfiguration.php');
$datenbankverbindung = mysql_connect   (HOST, BENUTZER, KENNWORT);
$datenbankauswahl    = mysql_select_db (DATENBANK);
// Übertragene Zeichenketten in Variablen speichern...
$vorname   = $_POST['vorname'];
$nachname  = $_POST['nachname'];
$email     = $_POST['email'];
$password  = $_POST['password'];
// Tabellen und Spalten bestimmen... 
$datenspeicherung = "INSERT INTO `user_anmeldung`
(`Vorname` , `Nachname` , `Email` , `Password`)
VALUES
('$vorname' , '$nachname' , '$email' , '$password')";
// Daten werden eingetragen 
$db_erg = mysql_query($datenspeicherung);
// Mysql verbindung wird eingestellt...
mysql_close($datenbankverbindung);
?>
)
Wen ich jetzt keine Daten übergebe, sondern einfach nur das Script durch laufen lasse ,dann erstellt er mir in der Datenbank ne leere Spalte :confused:

Ist das normal?

mfg.one
 
Zuletzt bearbeitet:
Moin,

NULL ist Nichts, ein leerer String ist jedoch mehr als Nichts.

NOT NULL bedeutet bei der Spaltendefinition, dass diese Spalte nicht den Wert NULL annehmen kann.

NULL ist ein spezieller Datentyp:
Angenommen, du hast eine Spalte vom Typ INT, und fügst einen Datensatz ein, ohne einen Wert für diese Spalte zu benennen, dann passiert folgendes:

Ist die Spalte NOT NULL, wird dort der Integer-Wert 0 eingefügt.
Ist in der Spalte jedoch NULL lt. Definition erlaubt, wird dort der Wert NULL eingefügt.

NOT NULL hat also den Effekt, dass du sicher gehen kannst, dass in dieser Spalte immer Daten des vorgesehenen Typs gespeichert werden, gespeichert wird aber auf jeden Fall.

Die Prüfung auf leere Variablen müsstest du vorher mit PHP vornehmen.
 
Angenommen, du hast eine Spalte vom Typ INT, und fügst einen Datensatz ein, ohne einen Wert für diese Spalte zu benennen, dann passiert folgendes:

Ist die Spalte NOT NULL, wird dort der Integer-Wert 0 eingefügt.
Ist in der Spalte jedoch NULL lt. Definition erlaubt, wird dort der Wert NULL eingefügt.
Das muss nicht immer sein, je nachdem ob die Spalte einen Default-Wert besitzt. Als Beispiel eine MySQL-Session:
Code:
mysql> create table test (a int);
Query OK, 0 rows affected (0.00 sec)

mysql> insert into test values ();
Query OK, 1 row affected (0.01 sec)

mysql> select * from test;
+------+
| a    |
+------+
| NULL | 
+------+
1 row in set (0.00 sec)

mysql> drop table test;
Query OK, 0 rows affected (0.00 sec)

mysql> create table test (a int not null);
Query OK, 0 rows affected (0.00 sec)

mysql> insert into test values ();
Query OK, 1 row affected, 1 warning (0.00 sec)

Warning (Code 1364): Field 'a' doesn't have a default value
mysql> select * from test;
+---+
| a |
+---+
| 0 | 
+---+
1 row in set (0.00 sec)

mysql> drop table test;
Query OK, 0 rows affected (0.00 sec)

mysql> create table test (a int not null default 42);
Query OK, 0 rows affected (0.01 sec)

mysql> insert into test values ();
Query OK, 1 row affected (0.01 sec)

mysql> select * from test;
+----+
| a  |
+----+
| 42 | 
+----+
1 row in set (0.01 sec)

mysql> drop table test;
Query OK, 0 rows affected (0.00 sec)

mysql> create table test (a int default 42);
Query OK, 0 rows affected (0.00 sec)

mysql> insert into test values ();
Query OK, 1 row affected (0.00 sec)

mysql> select * from test;
+------+
| a    |
+------+
|   42 | 
+------+
1 row in set (0.00 sec)
Zusammengefasst:
  • NULL erlaubt, kein Default-Wert: NULL
  • NOT NULL, kein Default-Wert: 0 (mit Warnung)
  • NOT NULL, mit Default-Wert: der Default-Wert
  • NULL erlaubt, mit Default-Wert: der Default-Wert
Hat mit dem Problem an sich zwar nichts zu tun, aber der Vollständigkeit halber :)

Grüße, Matthias
 
Allso könnte ich jetzt bei der Spalte Passwort oder Usernamen nicht NOT NULL stehen haben,da ich ja nicht weiß was der User eingipt ?

mfg.one
 
NULL hat nichts damit zu tun, was der User eingibt.
Wenn der User etwas eingibt, dann hast du einen String, wenn der User nichts eingibt, hast du einen leeren String....dieser ist jedoch nicht gleichbedeutend mit NULL.

Nochmal: NOT NULL heisst nicht, dass ein Datensatz nicht gespeichert wird, wenn für die betreffende Spalte kein Wert angegeben wurde.

NOT NULL besagt nur, dass in dieser Spalte nicht der Datentyp NULL gespeichert werden kann.
 

Neue Beiträge

Zurück