sql: unix timestamp als default

Bash, Shell, PHP, Python, Perl, CGI
d3nation
Posts: 68
Joined: 2004-11-30 14:09

sql: unix timestamp als default

Post by d3nation » 2006-11-14 08:57

Hi,

wie kann ich beim erstellen einer Tabelle einer Spalte als Default-Wert den momentanen Unix-Timestamp eintragen?

Am besten soll der Datentyp INTEGER (11?!) sein, der normale TIMESTAMP-Datentyp speichert ja leider in der form 1970-01-01 00:00:00


Grüße
Jos

lucki2
Posts: 427
Joined: 2006-10-03 01:31

Re: sql: unix timestamp als default

Post by lucki2 » 2006-11-14 10:19

Das ist nur Darstellung.

Code: Select all

select UNIX_TIMESTAMP(ts) from t;
(wenn ts deine TIMESTAMP Spalte ist und t die Tabelle)
speichert ja leider in der form 1970-01-01...
Das besser! Noch gibt es Menschen, die vor 1970 geboren wurden!
schau was Da rauskommt:

Code: Select all

UNIX_TIMESTAMP("1969-01-01 01:00:00");
:wink:
Last edited by lucki2 on 2006-11-14 10:27, edited 1 time in total.

d3nation
Posts: 68
Joined: 2004-11-30 14:09

Re: sql: unix timestamp als default

Post by d3nation » 2006-11-14 10:23

Falsch verstanden.
Ich will sobald ich einen neuen Datensatz anlege, automatisch von seiten SQL den UNIX_TIMESTAMP eintragen lassen.
So in der art:

Code: Select all

CREATE TABLE groups(
`id` INTEGER( 11 ) AUTO_INCREMENT ,
`creation_date` INT( 11 ) DEFAULT UNIX_TIMESTAMP() ,
PRIMARY KEY( `id` ),
);
Leider funktioniert das nicht.

lucki2
Posts: 427
Joined: 2006-10-03 01:31

Re: sql: unix timestamp als default

Post by lucki2 » 2006-11-14 10:32

Das habe ich schon so verstanden.
Nicht verstehe ich, warum Du eine Zeit in einem INTEGER speichern willst, wenn es dafür den TIMESTAMP datentyp gibt, der genau das selbe macht(bzw besser: 1970!), was Du von dem Integer willst.

d3nation
Posts: 68
Joined: 2004-11-30 14:09

Re: sql: unix timestamp als default

Post by d3nation » 2006-11-14 10:40

Eben weil TIMESTAMP Daten nur in der Form (1970-01-01 00-00-00) erwartet.
Es ist irrelevant was vor 1970 war, es geht um UNIX_TIMESTAMPS die AUTOMATISCH erstellt werden sollen, sprich da kann nie irgendwie eine Zeit vor JETZT sein.
Ich will einen UNIX_TIMESTAMP, weil mein PHP-Script damit arbeitet und die Daten so erwartet, ich bin nur am umdesignen der Datenbank, das PHP soll/MUSS unangerührt bleiben. Also gibt es da eine Möglichkeit? :)

Jos

ps. Danke für die Antworten!

lucki2
Posts: 427
Joined: 2006-10-03 01:31

Re: sql: unix timestamp als default

Post by lucki2 » 2006-11-14 10:52

weil mein PHP-Script..
Das dachte mir.
Deswegen habe ich Dir ja auch gesagt: einfach dem MySQL sagen wie Du den TIMESTAMP dargestellt haben willst - in Deinem falle als UNIX_TIMESTAMP.

Als Default kannst Du nur Konstanten angeben mit der großen Ausnahme CURRENT_TIMESTAMP.

lucki2
Posts: 427
Joined: 2006-10-03 01:31

Re: sql: unix timestamp als default

Post by lucki2 » 2006-11-14 10:59

ahhh das PHP darf nicht angerührt werden. Das war das entscheidende.
Vielleicht hilft Dir ein View? Aber Du brauchst ein neueres MySQL dafür:

Code: Select all

create view tview as select UNIX_TIMESTAMP(ts) as ts from t;
Dann geht das:

Code: Select all

select * from tview;

d3nation
Posts: 68
Joined: 2004-11-30 14:09

Re: sql: unix timestamp als default

Post by d3nation » 2006-11-14 11:34

Das ist eine Idee, Danke.
Mal sehen, des ganze muss kompatibel zu soviel wie möglich sql versionen sein, deswegen hab ich vermutlich tatsächlich keine andere Wahl als die unendlich vielen und komplizierten PHP-Funktionen zu ändern.

Thx!
Jos

lucki2
Posts: 427
Joined: 2006-10-03 01:31

Re: sql: unix timestamp als default

Post by lucki2 » 2006-11-14 11:47

zu soviel wie möglich sql versionen sein
Dann brauchst Du wahrscheinlich sowieso einen Wrapper.
Idee:ODBC dazwischen, und das Mappen dem ODBC überlassen oder PEAR ansehen, ob das was hilft:
http://pear.php.net/package/DB/

Du kannst bei Pear auch in den Source schauen, wie die das machen, und für Dich optimieren. HTH