Tom: MYSQL: Timestamp

Hello,

habe gerade einige "Versionsängste" bei MySQL

Das war möglich bis Version 4.x

CREATE TABLE test1 (
  zahl int(11) NOT NULL default '0',
  ts1 timestamp(14) NOT NULL,
  ts2 timestamp(14) NOT NULL default '00000000000000'
) TYPE=MyISAM;

INSERT INTO test1 (zahl, ts2) VALUES (2, NULL);

SELECT * FROM test1;
zahl  ts1               ts2
2     20050308100309    20050308100309

UPDATE test1 SET zahl = 3 WHERE zahl = 2;

SELECT * FROM test1;
zahl  ts1               ts2
3     20050308100542    20050308100309

Nun entwickeln wir hier ein kleines System und auf dem Produktiv-Servern ist noch eine 4.x bzw. sogar noch 3.23.55/58 drauf.

Der lokale Entwicklerplatz hat ein XAMPP mit version 5.0.18-nt

Da funktioniert das mit den Defaults und Extras für den Spaltentyp Timestamp nicht mehr so wie oben. Wie kann man das so kompatibel bauen, dass es auf allen Versionen die gleiche Wirkung hat?

TS 1 immer geführt
TS 2 nur beim Insert des Records geführt

Harzliche Grüße vom Berg
http://www.annerschbarrich.de

Tom

--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau

  1. echo $begrüßung;

    habe gerade einige "Versionsängste" bei MySQL

    Nichts ungewöhnliches also ... :-)

    Das war möglich bis Version 4.x
      ts2 timestamp(14) NOT NULL default '00000000000000'

    Genauer gesagt bis Version 4.0. Seit Version 4.1 hat sich das Format geändert.

    echo "$verabschiedung $name";

    1. Hello,

      habe gerade einige "Versionsängste" bei MySQL

      Nichts ungewöhnliches also ... :-)

      *mmhh*

      Das war möglich bis Version 4.x
        ts2 timestamp(14) NOT NULL default '00000000000000'

      Genauer gesagt bis Version 4.0. Seit Version 4.1 hat sich das Format geändert.

      Nachdem ich vorhin festgestellt hatte, warum meine Scripte nicht mehr "funzten" *grummel* habe ich auch versucht, diese Quellen auf eine geminsame Lösung der Versionen hin zu durchforsten. Leider bisher ohne Erfolg.

      Gibt es keine?
      Ist nur mein altes "MySQL-Front" daran Schuld, dass ich keine finde?
      Muss ich die Funktionalität tatsächlich in die Scripte verlagern, damit es versionsübergreifend funktioniert?

      Harzliche Grüße vom Berg
      http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau

      1. echo $begrüßung;

        Muss ich die Funktionalität tatsächlich in die Scripte verlagern, damit es versionsübergreifend funktioniert?

        Nun, das TIMESTAMP-Anzeigeformat ist jetzt das gleiche wie das von DATETIME. Du brauchst also nur noch ein Format zu beachten. Soweit ich mich an meine Versuche erinnere ist es in schreibender Richtung egal, ob man YYYYMMDDHHMMSS oder YYYY-MM-DD HH:MM:SS nimmt. In lesender Richtung kannst du ja eine dir genehme Formatierung mit den MySQL-Datetime-Formatierfunktionen erzeugen.

        Manchmal lohnt es sich auch die Userkommentare von Handbuchseiten zu lesen, besonders die ganz oben stehenden ... :-)

        echo "$verabschiedung $name";

        1. Hello,

          Muss ich die Funktionalität tatsächlich in die Scripte verlagern, damit es versionsübergreifend funktioniert?

          Nun, das TIMESTAMP-Anzeigeformat ist jetzt das gleiche wie das von DATETIME. Du brauchst also nur noch ein Format zu beachten. Soweit ich mich an meine Versuche erinnere ist es in schreibender Richtung egal, ob man YYYYMMDDHHMMSS oder YYYY-MM-DD HH:MM:SS nimmt. In lesender Richtung kannst du ja eine dir genehme Formatierung mit den MySQL-Datetime-Formatierfunktionen erzeugen.

          Das ist nicht das Problem, sondern die ekligen Fehlermeldungen, wenn ich die im OP stehende Syntax für die Erzeugung der Spalten in der 5er Version verwenden will. Außerdem kriege ich in der 5er Version den Automatismus nicht mehr hin,

          Insert:
            TS1 wird auf Current_Timestamp gesetzt
            TS2 wird auf Current_Timestamp gesetzt

          Update:
            TS1 wird auf Current_Timestamp gesetzt
            TS2 wird unbeachtet geallsen, wenn keine gültige neue Angabe dafür gemacht wurde.

          Manchmal lohnt es sich auch die Userkommentare von Handbuchseiten zu lesen, besonders die ganz oben stehenden ... :-)

          Mach ich sofort...

          Harzliche Grüße vom Berg
          http://www.annerschbarrich.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau

          1. hi,

            Außerdem kriege ich in der 5er Version den Automatismus nicht mehr hin,

            Insert:
              TS1 wird auf Current_Timestamp gesetzt
              TS2 wird auf Current_Timestamp gesetzt

            Spricht an den Stellen etwas gegen NOW()?

            Update:
              TS1 wird auf Current_Timestamp gesetzt
              TS2 wird unbeachtet geallsen, wenn keine gültige neue Angabe dafür gemacht wurde.

            TS1 auf NOW(), und TS2 entweder auf neuen Wert, oder auf TS2 setzen.
            Letzteres in die Scriptlogik zu verlagern, halte ich nicht für allzu umständlich.

            gruß,
            wahsaga

            --
            /voodoo.css:
            #GeorgeWBush { position:absolute; bottom:-6ft; }
            1. Hello,

              TS1 auf NOW(), und TS2 entweder auf neuen Wert, oder auf TS2 setzen.
              Letzteres in die Scriptlogik zu verlagern, halte ich nicht für allzu umständlich.

              Ich habe alles probiert ...
              Leider bekomme ich es bei MySQL 5.0.18-nt (aus dem Xampp) nicht mehr so elegant hin, wie das bei 3.23.x noch ging. Erste Timestampspalte wird immer automatisch gesetzt, zweite nur beim Insert...

              Es sthet zwar noch in der Beschreibung, dass DEFAULT NULL das Gleiche bewirken solle, wie CURRENT_TIMESTAMP, da rührt sich aber nichts, auch nicht, wenn man das für die erste Spalte festlegt.

              Für MySQL 5.x könnte ich wahrscheinlich einen Trigger setzen, der funktioniert aber bei der 4er Version dann nicht. Ich werde also das DAT_INSERT mittels Script setzen müssen im Insert-Statement.

              Schade eigentlich.

              Harzliche Grüße vom Berg
              http://www.annerschbarrich.de

              Tom

              --
              Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
              Nur selber lernen macht schlau