SQL MySQL-DB (phpMyAdmin) ignoriert null-Werte?

Dsimon24

Lieutenant
Registriert
Aug. 2016
Beiträge
595
Hallo zusammen,

ich versuche gerade eine kleine PHP-Anwendung zu programmieren, inkl. Datenbank:

SQL:
CREATE TABLE `test` (
  `id` int(11) NOT NULL,
  `feld_a` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL,
  `feld_b` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL,
  `feld_c` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

Das habe ich auf zwei Server in einer Testdatenbank angelegt.

Ich versuche nun einen Wert in die Datenbank einzubinden:
SQL:
INSERT INTO test (feld_b) VALUES ('Recklinghausen');

In der einen Datenbank gibt es einen Fehler, weil ich 'feld_a' und 'feld_b' nicht
berücksichtige, da NOT NULL. In der anderen Datenbank funktioniert es aber,
trotz NOT NULL - wie kann das sein?

VG, David
 
Was kommt denn in der Datenbank an? Steht da am Ende wirklich Null in der Spalte oder irgendein anderer Wert?
 
Da steht dann gar nichts, die Spalte ist komplett leer.
Aber an was könnte es liegen, dass es in der einen DB geht, in der anderen nicht?
Hat sich da eventuell mal bei den Versionen zwischenzeitlich ein Update ergeben,
welches das regelt bzw. genauer prüft?
 
Die eine DB läuft im strict mode, die andere nicht. Im strict mode schmeißt die DB einen Fehler, wenn einem NOT NULL-Feld kein Wert zugewiesen wird und das Feld keinen expliziten Defaultwert besitzt. Wenn der strict mode nicht aktiviert ist, wird beim gleichen Szenario ein impliziter Defaultwert eingetragen, der vom Datentyp abhängt.
 
Dsimon24 schrieb:
Da steht dann gar nichts, die Spalte ist komplett leer.
Ist die Spalte mit leeren Werten Zeichenketten (VARCHAR mit der Länge 0) oder NULL gefüllt? Das ist ein bedeutender Unterschied.
 
Der Scrict Mode kann es gut sein - aber wie deaktiviere ich ihn?
Ich habe in der my.cnf versucht, eine Ergänzung vorzunehmen und
anschließend den Service neu gestartet - siehe Screenshots.

Jetzt erhalte ich durch die Änderung gar nicht mehr die Möglichkeit, mich in
phpMyAdmin einzuloggen (Meldung: mysqli::real_connect(): (HY000/2002): No
such file or directory) - sende ich die SQL-Query zum Speichern eines Daten-
satzes ab, erhalte ich folgende Fehlermeldung:

Hätte ich das anders machen müssen?
SQLSTATE[HY000] [2002] Connection refused (SQL: insert into.......
 

Anhänge

  • my_cnf.png
    my_cnf.png
    424,6 KB · Aufrufe: 295
  • mysql_restart.png
    mysql_restart.png
    180,3 KB · Aufrufe: 286
Mach halt das was systemd sagt was du machen sollst, nämlich journalctl -xe befragen....

Und ich weiß nicht was Du treibst, aber mutwillig auch ncoh das letzte Bissel Integrität in die Tonne zu treten, wovon MySQL/MariaDB eh schon so viel nicht hat....

... was um alles in der Welt ist so schlimm daran, (A) einen Default für eine Spalte zu setzen, oder halt (B) einen expliziten Wert einzutragen? Die Daten müssen doch passen!

ENTWEDER hat man was wo man was eintragen MUSS, dann NOT NULL.
Oder halt nicht, dann nicht.

NULL = ich weiß nicht was ich hätte eintragen sollen, oder es gibt keine Daten. Ich weiß nicht wer die Maschine bedient, ergo operator = NULL. Ansonsten die ID dazu.
Oder, ich weiß nicht wo der wohnt, weil der Typ hats mir nicht gesagt, ergo anschrift = NULL.

Alternativ: ich kann kein Auto ohne Räder betreiben, also muß ich als Typ für die Räder notwendigerweise IRGENDWAS angeben. NULL geht nicht, dann würde das Auto nicht fahren. Ergo wheel_type NOT NULL.

Und so fort.

Strict Mode wieder anmachen, die Idee daß das ausgeht vergessen und nie wieder dran denken, die *.cnf Dateien von vorher wiederherstellen und dann den service wieder hochfahren.
 
  • Gefällt mir
Reaktionen: Raijin
Zurück
Oben