Default Unix_timestamp

Wolfsbein

Erfahrenes Mitglied
Hallo

ich will das in ein INT Feld automatisch der aktuelle Timestamp eingetragen wird.
Code:
MYDATE INT(10) NOT NULL DEFAULT 'UNIX_TIMESTAMP(NOW())'
// oder auch
MYDATE INT(10) NOT NULL DEFAULT 'UNIX_TIMESTAMP()'
Leider macht das ganze nicht so ganz das was ich will, da in MYDATE immer 0 steht, wenn ich nichts eingebe. Was muss ich anders machen? Danke.
 
Hallo,

Code:
mysql> drop table if exists times;
Query OK, 0 rows affected (0.00 sec)

mysql>
mysql> create table times (id int, clmTime TIMESTAMP not null default 'UNIX_TIME
STAMP()');
Query OK, 0 rows affected (0.02 sec)

mysql>
mysql> insert into times (id) values (1);
Query OK, 1 row affected (0.00 sec)

mysql>
mysql> insert into times (id) values (2);
Query OK, 1 row affected (0.00 sec)

mysql>
mysql> insert into times (id) values (3);
Query OK, 1 row affected (0.00 sec)

mysql>
mysql> select * from times;
+------+----------------+
| id   | clmTime        |
+------+----------------+
|    1 | 20040811171411 |
|    2 | 20040811171411 |
|    3 | 20040811171411 |
+------+----------------+
3 rows in set (0.00 sec)

Seltsamerweise ist das neben der deklaration des clmTime Feldes als Varchar die einzige
(von mir ausprobierte) Möglichkeit einen Wert != 0 zu bekommen.

clmTime hat dann das Format: YYYYMMDDHHMMSS

(server version: 3.23.57-nt)

In der Doku steht jedoch bei UNIX_TIMESTAMP():

UNIX_TIMESTAMP()
UNIX_TIMESTAMP(date)
If called with no argument, returns a Unix timestamp (seconds since '1970-01-01 00:00:00' GMT) as an unsigned integer. If UNIX_TIMESTAMP() is called with a date argument, it returns the value of the argument as seconds since '1970-01-01 00:00:00' GMT. date may be a DATE string, a DATETIME string, a TIMESTAMP, or a number in the format YYMMDD or YYYYMMDD in local time.
mysql> SELECT UNIX_TIMESTAMP();
-> 882226357
mysql> SELECT UNIX_TIMESTAMP('1997-10-04 22:23:00');
-> 875996580

(ACHTUNG!)

When UNIX_TIMESTAMP is used on a TIMESTAMP column, the function returns the internal timestamp value directly, with no implicit ``string-to-Unix-timestamp'' conversion. If you pass an out-of-range date to UNIX_TIMESTAMP(), it returns 0, but please note that only basic range checking is performed (year from 1970 to 2037, month from 01 to 12, day from 01 from 31). If you want to subtract UNIX_TIMESTAMP() columns, you might want to cast the result to signed integers. See section 13.7 Cast Functions.

Gruß Tom
 
Das heißt kurz gesagt, dass ich die Zeit nicht der DB überlassen kann, sondern doch mit PHP abfragen und dann einfügen muss?
 
Hallo,

ich empfehle dir anstatt eines Integer-Feldes ein Feld des Typs "TIMESTAMP".
In dieses Feld kannst du mit NOW() den aktuellen Timestamp eintragen :).

cu Bloddy
 
Hallo,

ja das ist richtig - der MySQL Timestamp ist nicht der UNIX_TIMESTAMP, da er im Format YYYYMMDDHHMMSS abgelegt wird. Aber er unterstützt das Format des UNIX_TIMESTAMP indirekt:

PHP:
// feld_mit_timestamp stellt ein Feld des Typs TIMESTAMP dar
SELECT feld_mit_timestamp,UNIX_TIMESTAMP(feld_mit_timestamp) AS unix_ts FROM tabelle
- "unix_ts" gibt dir deinen gewünschten Timestamp (Sekunden seit 1970) aus.


Vielleicht hilft es dir ja :).

cu Bloddy
 
Zurück