# MYSQL - DATE mit leerem Wert



## skippy3 (25. Juni 2008)

Hallo,

ich habe in der Datenbank ein Feld vom Typ DATE. Wenn ich kein Datum eintrage ist der Wert immer 1970-01-01.

Wie kriege ich ein leeres Feld wenn kein Wert vorhanden ist?
Beispiel: Eintritt - Austritt
Eintritt ist bekannt
Austritt noch ohne Wert


----------



## Dunas (25. Juni 2008)

Ich habe es gerade getestet.


```
CREATE TABLE IF NOT EXISTS `test` (
  `id` int(11) NOT NULL auto_increment,
  `eintritt` date default NULL,
  `austritt` date default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci
```

Wenn ich jetzt was einfüge und dabei austritt mit NULL fülle, bleibt es auch NULL.
Schau mal nach ob du bei default was anderes stehen hast, oder du eigestellt hast dass das Feld nicht NULL sein darf


----------



## Tekkion (25. Juni 2008)

bin mir jetzt nicht ganz sicher aber ich glaube nicht dass du NULL einfügen kannst. Immerhin ist die Variable vom typ date also kann da nur ein Datum drin stehen.


----------



## skippy3 (25. Juni 2008)

Tekkion hat gesagt.:


> bin mir jetzt nicht ganz sicher aber ich glaube nicht dass du NULL einfügen kannst. Immerhin ist die Variable vom typ date also kann da nur ein Datum drin stehen.



Das Feld vom Typ DATE hat Standard NULL, Allerdings bleibt das Feld nicht leer sondern wird immer mit 1970-01-01 gefüllt. Auch wenn ich den Wert lösche wird er immer wieder eingetragen.


----------



## Dunas (25. Juni 2008)

Die Tabelle ist wie oben.


```
INSERT INTO `ds_weltdaten`.`test` (
`id` ,
`eintritt` ,
`austritt`
)
VALUES (
NULL , CURDATE( ) , NULL
);
```
Unten seht ihr das Ergebniss. 
Der MySQL Query Browser liefert genau das selbe Ergebniss. Bei mir ist die Spalte NULL geblieben

EDIT: Bei PHPMyAdmin habe ich auch eingestellt das die Spalte NULL sein kan.


----------



## skippy3 (26. Juni 2008)

Dunas hat gesagt.:


> Die Tabelle ist wie oben.
> 
> 
> ```
> ...



Ich habe mal einen Auszug aus meiner Datei angehängt. Bim eintragen ohne Wert oder löschen kriege ich immer 1970-01-01.

```
$query = '  INSERT INTO
                    `adressen`
                    (
                    `nummer`,
                    `eintritt`,
                    `austritt`,
                    )
                VALUES
                (
                "' .$nummer. '",
                "' .date( 'Y-m-d', strtotime( $eintritt ) ). '",
                "' .date( 'Y-m-d', strtotime( $austritt ) ). '",
                )';


    <form method="post" action="anlegen.php">

    <table>
      <tr>
       <td width="85">Nummer</td>
       <td width="120"><input type="text" name="nummer" value=""></td>
       <td width="30">&nbsp;</td>

       <td width="85">Eintritt</td>
       <td width="120"><input type="text" name="eintritt" value=""></td>
       <td width="30">&nbsp;</td>

       <td width="85">Austritt</td>
       <td width="120"><input type="text" name="austritt" value=""></td>
       <td width="30">&nbsp;</td>
      </tr>
    </table>
```


----------



## Matze (26. Juni 2008)

Ich glaube, dass geht gar nicht anders. Aber du kannst doch Abfragen, ob das Datum 1970-01-01 ist; wenn ja, dann soll es dein Programm als "unbekannt" oder eben "NULL" interpretieren.


----------



## skippy3 (26. Juni 2008)

Matze hat gesagt.:


> Ich glaube, dass geht gar nicht anders. Aber du kannst doch Abfragen, ob das Datum 1970-01-01 ist; wenn ja, dann soll es dein Programm als "unbekannt" oder eben "NULL" interpretieren.


Dann nehme ich das Datum lieber als varchar.


----------



## Matze (26. Juni 2008)

Wenn du denkst, dass das sinnvoll ist... Ich versteh aber nicht, warum


----------



## skippy3 (26. Juni 2008)

Matze hat gesagt.:


> Wenn du denkst, dass das sinnvoll ist... Ich versteh aber nicht, warum



Weil mir die "Interpretation" zu aufwendig erscheint.


----------



## Dunas (26. Juni 2008)

100er POST



Matze hat gesagt.:


> Ich glaube, dass geht gar nicht anders. Aber du kannst doch Abfragen, ob das Datum 1970-01-01 ist; wenn ja, dann soll es dein Programm als "unbekannt" oder eben "NULL" interpretieren.




Das es anders geht habe ich ja bewiesen.
Vieleicht liegt es daran das du aus nichts ein Datum formen möchtest.


```
$query = '  INSERT INTO
                    `adressen`
                    (
                    `nummer`,
                    `eintritt`,
                    `austritt`,
                    )
                VALUES
                (
                "' .$nummer. '",
                "' .date( 'Y-m-d', strtotime( $eintritt ) ). '",
                "' .date( 'Y-m-d', strtotime( $austritt ) ). '",
                )';
```
So wie ich dich verstanden habe ist $austritt leer. 

Eine Interpretation ist nicht schwer.
Wenn du die Sachen anzeigen lässt, überprüfst du einfach ob der Austrittswert = 1970-01-01 ist. Wenn ja zeigt du einfach nichts an.


----------



## zeja (26. Juni 2008)

Warum läßt beim INSERT INTO die Datumsspalte in der Spaltenaufzählung nicht einfach weg und ebenso bei den VALUES? Dann sollte doch NULL drin stehen.


----------



## skippy3 (27. Juni 2008)

zeja hat gesagt.:


> Warum läßt beim INSERT INTO die Datumsspalte in der Spaltenaufzählung nicht einfach weg und ebenso bei den VALUES? Dann sollte doch NULL drin stehen.



Ist auch eine Möglichkeit. Werde ich mal ausprobieren (Wobei ich immer noch nicht verstehe, dass in PHPMyAdmin ein gelöschtes Feld einen Wert bekommt)


----------



## skippy3 (27. Juni 2008)

100er POST

Das es anders geht habe ich ja bewiesen.
Vieleicht liegt es daran das du aus nichts ein Datum formen möchtest.


skippy3 hat gesagt.:


> ```
> $query = '  INSERT INTO
> `adressen`
> (
> ...



$austritt ist beim anlegen leer. Ich habe auch noch das Geb-Datum, das kann leer sein oder eben mit einer Angabe. Mich stört einfach, dass ein Feld mit DEFAULT NULL auch ohne Eingabe 1970-01-01 bekommt.



Dunas hat gesagt.:


> 100er POST
> Eine Interpretation ist nicht schwer.
> Wenn du die Sachen anzeigen lässt, überprüfst du einfach ob der Austrittswert = 1970-01-01 ist. Wenn ja zeigt du einfach nichts an.



Eine Interpretation ist (für mich) schon schwer. Lasse dich von dem obigen Code nicht täuschen, den habe ich auch nur mit Unterstützung von LOOMES hinbekommen (oder besser gesagt er und ich habe abgetippt)


----------



## mDie (20. Juli 2021)

Hallo,

auch wenn meine Antwort erst ein paar Jahre später kommt, aber du meinst sicher dies hier:


```
$sql = "INSERT INTO person (
    name,
    geburtstag,
    alter
) VALUES (
    '".$_POST['name']."',
    ".(($_POST['geburtstag']=='')?"NULL":("'".$_POST['geburtstag']."'")).",
    '".$_POST['alter']."'
)";
```

In der Variable "Geburtstag" ist - wenn nicht leer - ein Geburtsdatum im Format: YYYY-MM-DD enthalten. Übergibst du ein Datum im Format DD-MM-YYYY, musst du $_POST['geburtstag'] wie folgt ändern: date('Y-m-d', strtotime($_POST['geburtstag'])).


----------

