UPDATE bei Zeitangaben "kaputt" ?

UPDATE bei Zeitangaben "kaputt" ?

am 09.02.2007 11:25:39 von vaggy

Na Hola!

Habe folgende Beobachtung in der MySQL-Konsole gemachcht:


mysql> update mytable set sid=3D1000 where id=3D2;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> update mytable set PIN=3D'6666' where id=3D2;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> select PIN,sid from mytable where id=3D2;
+------+------+
| PIN | sid |
+------+------+
| 6666 | 1000 |
+------+------+
1 row in set (0.00 sec)


Soweit alles OK. Nun mache ich das Gleiche mit einer Zeitangabe:


mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2007-02-09 11:20:53 |
+---------------------+
1 row in set (0.00 sec)

mysql> update mytable set sidtimeout=3Ddate_add(now(),interval 20
minute) where id=3D2;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> update mytable set PIN=3D'1234' where id=3D2;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> select PIN,sidtimeout from mytable where id=3D2;
+------+----------------+
| PIN | sidtimeout |
+------+----------------+
| 1234 | 20070209112155 |
+------+----------------+
1 row in set (0.00 sec)


Zur Erläuterung:
1 Die aktuelle Zeit war 2007-02-09 11:20:53
2 Ich führe ein UPDATE aus und stelle das Feld "sidtimeout" auf jetzt
+ 20 Minuten
3 Ich führe ein UPDATE aus und stelle das Feld "PIN" auf "1234"

Selektiere ich den Datensatz nun, hat er Feld "PIN" richtig verändert.
Bei Feld "sidtimeout" hat er den ersten UPDATE einfach mit der
aktuellen Systemzeit überschrieben.

Ich werd da ned draus schlau. Kennt das hier jemand? Weiß jemand da
weiter? Ist das gar ein (mir) unbekannter Bug in MySQL?

Liebe Grüsse aus Hannover

Gerd Wagner

Re: UPDATE bei Zeitangaben "kaputt" ?

am 09.02.2007 11:51:00 von Axel Schwenke

"vaggy" wrote:
>
> mysql> select now();
> +---------------------+
> | now() |
> +---------------------+
> | 2007-02-09 11:20:53 |
> +---------------------+
>
> mysql> update mytable set sidtimeout=date_add(now(),interval 20
> minute) where id=2;
> Query OK, 1 row affected (0.00 sec)
> Rows matched: 1 Changed: 1 Warnings: 0
>
> mysql> update mytable set PIN='1234' where id=2;
> Query OK, 1 row affected (0.00 sec)
> Rows matched: 1 Changed: 1 Warnings: 0
>
> mysql> select PIN,sidtimeout from mytable where id=2;
> +------+----------------+
> | PIN | sidtimeout |
> +------+----------------+
> | 1234 | 20070209112155 |
> +------+----------------+
> 1 row in set (0.00 sec)
....

> Selektiere ich den Datensatz nun, hat er Feld "PIN" richtig verändert.
> Bei Feld "sidtimeout" hat er den ersten UPDATE einfach mit der
> aktuellen Systemzeit überschrieben.

Laß mich raten, die Spalte `sidtimeout` hat den Typ TIMESTAMP?
Dann ist das exakt das gewünschte Verhalten:

http://dev.mysql.com/doc/refman/4.1/en/timestamp-pre-4-1.htm l


XL

Re: UPDATE bei Zeitangaben "kaputt" ?

am 09.02.2007 11:56:36 von Wolfgang Kueter

vaggy wrote:

> Selektiere ich den Datensatz nun, hat er Feld "PIN" richtig verändert.
> Bei Feld "sidtimeout" hat er den ersten UPDATE einfach mit der
> aktuellen Systemzeit überschrieben.

Normal bei MySQL fuer das erste Feld einer Tabelle vom Datentyp timestamp.

> Ich werd da ned draus schlau. Kennt das hier jemand? Weiß jemand da
> weiter? Ist das gar ein (mir) unbekannter Bug in MySQL?

Kein Bug sondern ein Feature des Datentyps timestamp vom MySQL:

http://dev.mysql.com/doc/refman/4.1/en/timestamp-pre-4-1.htm l

Verwende stattdessen datetime oder lebe mit den Eigenheiten des 1. Feldes
von Datentyp timestamp.

Wolfgang

Re: UPDATE bei Zeitangaben "kaputt" ?

am 09.02.2007 12:27:18 von vaggy

Na Hola!

Ja, es war TIMESTAMP. Nach der Umstellung auf DATETIME geht alles so
wie es soll.
1000.000 Dank an Euch alle!

Liebe Grüsse aus Hannover

Gerd Wagner

PS:
Vielleicht kann ich Euch auch einen Gefallen tun. Wenn Ihr eine neue
Aufgabe sucht oder etwas Geld nebenher verdienen wollt, meldet Euch
einfach auf www.jobmobil.org



On 9 Feb., 11:51, Axel Schwenke wrote:
> "vaggy" wrote:
>
> > mysql> select now();
> > +---------------------+
> > | now() |
> > +---------------------+
> > | 2007-02-09 11:20:53 |
> > +---------------------+
>
> > mysql> update mytable set sidtimeout=3Ddate_add(now(),interval 20
> > minute) where id=3D2;
> > Query OK, 1 row affected (0.00 sec)
> > Rows matched: 1 Changed: 1 Warnings: 0
>
> > mysql> update mytable set PIN=3D'1234' where id=3D2;
> > Query OK, 1 row affected (0.00 sec)
> > Rows matched: 1 Changed: 1 Warnings: 0
>
> > mysql> select PIN,sidtimeout from mytable where id=3D2;
> > +------+----------------+
> > | PIN | sidtimeout |
> > +------+----------------+
> > | 1234 | 20070209112155 |
> > +------+----------------+
> > 1 row in set (0.00 sec)
>
> ...
>
> > Selektiere ich den Datensatz nun, hat er Feld "PIN" richtig verändert.
> > Bei Feld "sidtimeout" hat er den ersten UPDATE einfach mit der
> > aktuellen Systemzeit überschrieben.
>
> Laß mich raten, die Spalte `sidtimeout` hat den Typ TIMESTAMP?
> Dann ist das exakt das gewünschte Verhalten:
>
> http://dev.mysql.com/doc/refman/4.1/en/timestamp-pre-4-1.htm l
>
> XL- Zitierten Text ausblenden -
>
> - Zitierten Text anzeigen -