hawkmaster: Unterschiede MSSQL datetime2 => MySQL datetime?

Hallo zusammen,

in einer MySQL Tabelle "jobs" gibt es die Spalte "Deadline" Diese ist als "datetime" definiert. Man kann hier einen Termin eintragen. Wenn bei einem Insert der übergebene Wert leer ist, steht in der Datenbank
0000-00-00 00:00:00

Ich versuche nun das gleiche bei einem SQL Server 2008 Express. Hier ist die Spalte "Deadline" als "datetime2" definiert.
Wenn hier der Insert Wert für Deadline leer ist wird aber immer ein Datum
01.01.1900 00:00:00

eingetragen.

Warum ist dies so?
Kann man es erreichen das das Datum genauso ist wie in MySQL wenn der Wert leer ist?
Warum ist das Format eigentlich im deutschen Format und bei MySQl in Englisch?

vielen Dank und viele Grüße
hawk

  1. Hi!

    Kann man es erreichen das das Datum genauso ist wie in MySQL wenn der Wert leer ist?

    Nimm NULL, wenn kein Datum vorhanden ist, das ist DBMS-übergreifend eindeutig. NULL-Werte verlangen jedoch im abfragenden Programm eine gesonderte Berücksichtigung.

    Warum ist das Format eigentlich im deutschen Format und bei MySQl in Englisch?

    Default-Einstellungen des Systems.

    Lo!

    1. Hallo dedlfix,

      Nimm NULL, wenn kein Datum vorhanden ist, das ist DBMS-übergreifend eindeutig.

      Hmm, wenn ich mir die Spalte Deadline im SQL Server Management Studio anschaue so steht hier schon (NULL) als Standardwert.
      Ich vermute aber (so habe ich es gelesen) das der Standardwert immer 01.01.1900 für das Datum ist.
      Dann werde ich dies vermutlich in meinem PHP Code berücksichtigen müssen.

      Default-Einstellungen des Systems.

      Das heisst; bei einem deutschen SQL Server ist es so:
      29.03.2009
      und bei einem englischen SQL Server so?
      2009-03-29

      oder meinst du mit System das Betriebssystem?

      vielen Dank und viele Grüße
      hawk

      1. Hi!

        Das heisst; bei einem deutschen SQL Server ist es so:
        29.03.2009
        und bei einem englischen SQL Server so?
        2009-03-29
        oder meinst du mit System das Betriebssystem?

        Das kann da auch mit reinspielen. Beim SQL-Server ist es, soweit ich mich erinnere, abhängig von der Einstellung des Benutzerkontos, wobei dieses wiederum von der globalen Konfiguration des SQL-Servers. Am besten ist es, sich nicht auf Gegebenheiten zu verlassen sondern explizit was einzustellen. Ich denke, abgesehen von im SELECT verwendbaren Funktionen zur Datumsformatierung, dass es da auch eine Systemvariable mit einem Format-String gibt, den man sich session-individuell einstellen kann.

        Lo!

        1. Hallo,

          nach ein wenig suchen bei MSDN habe ich gesehen, daß man wohl die Sprache mit
          "SET LANGUAGE" zur Laufzeit verändern kann. Dies soll sich auch auf die datetime werte auswirken.

          http://msdn.microsoft.com/de-de/library/ms174398.aspx

          Ich habe es jetzt so versucht:

          $DBO->query("SET LANGUAGE English");

          Allerdings wird mir das Datum immer noch im deutschen Format gespeichert.
          Ich werde mal weiter forschen :-)

          vielen Dank und viele Grüße
          hawk

          1. So, bin jetzt nochmals einen Schritt weiter.
            Es liegt / lag an dem neuen Datentyp "datetime2"
            Hier wirken sich die SET LANGUAGE Einstellungen nicht aus!
            selbst nicht wenn man im Server die Default Sprache auf English ändert.

            Wenn man hingegen den Datentyp "datetime" nimmt, dann speichert er das Datum im gleichen Format wie MySQL nämlich mit - anstatt einem Punkt.

            vielen Dank und viele Grüße
            hawk

            1. Hallo,

              Wenn man hingegen den Datentyp "datetime" nimmt, dann speichert er das Datum im gleichen Format wie MySQL nämlich mit - anstatt einem Punkt.

              Du bist Dir aber dessen bewußt, daß ein datetime Wert nicht als Zeichenfolge sondern als Integer mit eigener Interpretation gespeichert wird?

              Die Visualisierung ist nur eine Umrechnung des Zahlenwertes in eine für Menschen lesbare Darstellung als Zeichenfolge, die beliebig formatiert werden kann.

              Der Basiswert für die datetime Angaben in MS SQL wäre Deinen Angaben zufolge der 01.01.1900 (weiß ich nicht aus der Mütze) und entspricht dem Integerwert 0. Eventuell ist dieser Wert als Standard für nicht angegebene Werte eingestellt?

              MfG