On Tue, 1 Nov 2005 10:24:44 +0100, "Kasper Johansen"
<kasper@johansen.tdcadsl.dk> wrote:
>Jeg skal ikke kunne sige om PHP understøtter MySQL's format af tid, men det
>er umiddelbart mit indtryk at det ikke gør? Eller kan man få et
>MySQL-tidformat ud som et timestamp, således at man kan bruge det sammen med
>PHP's datoformater bagefter?
MySQL har UNIX_TIMESTAMP() til at konvertere et datofelt til unixtime,
hvis det er nødvendigt.
Jeg tror blot at min holdning er, at data skal gemmes i dets
tilsvarende format. Unix timestamp er et system til at henvise til
sekunder i et givent tidsinterval, og som sådan et subsæt af et
generelt tidssystem. Derfor ser jeg ingen grund til at tage
udgangspunkt i timestamps. Den direkte data giver i mine øjne også
lettere overblik, når man skimmer sit indhold igennem.
>Kan du ridse nogle punkter op, hvorfor at man burde bruge MySQL's format
>fremfor PHP's?
Altså, hvis man er mest hjemme i PHP, og det i øvrigt ikke gør den
store forskel om man har logik i database-opslagene eller i
applikationen, så er det selvfølgelig bare hvad der passer én bedst.
Man kan fx komme langt med strtotime() og mktime() i PHP.
Unix timestamps kan virke appellerende, fordi man blot kan bruge
simpel matematik (fx +(60*60*24) og lignende). Dog kan man let komme
til kort i forhold til at tilføje en måned, et år eller lignende, hvor
der indgår variable. I stedet for at genopfinde datologik, vil man
alligevel være tvunget til at bruge en anden håndtering. For PHPs
vedkommende kunne det fx være:
list($y,$m,$d,$h,$i,$s) = explode(" ",date("Y m d H i s",$somedate));
$plusonemonth = mktime($h,$i,$s,$m+1,$d,$y);
I MySQL kan en tilsvarende løsning være:
SELECT somedate + INTERVAL 1 MONTH AS plusonemonth ..
Dertil kommer at opløsningen eller omfanget i unix timestamps måske
ikke er godt nok i forhold til mikrosekunder eller datoer uden for år
1901 til 2038.
Hvad angår formattering af data, så findes der også et væld af
funktioner i MySQL, hvis det er den del, man er bekymret for, og man
er frisk på at lave formatteringen i database-laget:
http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html
>Ellers kunne det jo være, at man, som du skriver, burde sætte sig lidt mere
>ind i MySQL's format :)
Det kan måske også bare være, at jeg ikke bryder mig om unixtime
Eller måske snarere den unødige konvertering
>Endnu et spørgsmål. Jeg regner med at MySQL er hurtigere til at håndtere
>dens egen format. Men hvad er forskellen i performance? Er der nogen der har
>erfaringer, målt det, eller sidder med et link til en god guide?
Forskellen er ret sikkert minimal. Sandsynligvis er det vilkårligt
hurtigere at benytte sig af unixtime. Her kan man klare sig med en
32-bit int, hvorimod et DATETIME-felt optager 64 bit. I praksis har
det sandsynligvis ingen betydning.
--
- Peter Brodersen