|
| MySQL - Timestamp Fra : Thomas Voller |
Dato : 22-08-04 20:52 |
|
Hej DB-eksperter.
Jeg sidder og roder med min første MySQL-database. I en given tabel har jeg
en kolonne med typen "Timestamp". Jeg synes Timestamp-typen er supersmart,
da den automatisk indsætter det korrekte tidspunkt for oprettelse, når man
indsætter en ny række i tabellen via en web-applikation. Så slipper man for
at tænke over at indsætte tidpunktet manuelt. Dovenskaben længe leve, spring
over hvor gærdet er... osv.
Dog er det et problem for mig, hvis jeg på et senere tidspunkt vil gemme
nogle ændringer i rækken via en update-sql-sætning. Så bliver den
oprindelige værdi i Timestamp-kolonnen opdateret til at være det tidspunkt,
hvor man redigerede i rækken, i stedet for det tidspunkt man oprettede
rækken. Kan man på en fiks måde undgå at ens værdi i Timestamp-kolonnen
bliver opdateret, når man redigerer i nogle af de andre oplysninger i
rækken?
Håber det giver mening, det lyder lidt kringlet ved gennemlæsning...
| |
Peter Brodersen (22-08-2004)
| Kommentar Fra : Peter Brodersen |
Dato : 22-08-04 21:04 |
|
On Sun, 22 Aug 2004 21:51:38 +0200, "Thomas Voller"
<voller@nospam-voller.dk> wrote:
>Dog er det et problem for mig, hvis jeg på et senere tidspunkt vil gemme
>nogle ændringer i rækken via en update-sql-sætning. Så bliver den
>oprindelige værdi i Timestamp-kolonnen opdateret til at være det tidspunkt,
>hvor man redigerede i rækken, i stedet for det tidspunkt man oprettede
>rækken.
Det er lige præcis sådan, timestamp virker, ja. Hvis rækken ændres, og
man ikke ændrer timestamp-feltet, så bliver det rettet til. Det er en
feature.
Hvis du absolut stadigvæk vil bruge timestamp, kan du altid explisit
sætte den. Fx med sin egen værdi
UPDATE tabel
SET timestampfelt = timestampfelt,
fornavn = 'Hans',
efternavn = 'Hansen'
WHERE id = 10
Det kunne dog lyde som om, du ville have lige så meget glæde af at
lave et datetime-felt, og så indsætte NOW() for det felt, når du
indsætter en række. Så behøver du ikke at bekymre dig om timestamps
automatiske opdatering.
--
- Peter Brodersen
php -r 'print floor(8.2-0.2);'
perl -le 'print 5-4.9;'
| |
Thomas Voller (22-08-2004)
| Kommentar Fra : Thomas Voller |
Dato : 22-08-04 21:43 |
|
"Peter Brodersen" <usenet@ter.dk> skrev
> Det kunne dog lyde som om, du ville have lige så meget glæde af at
> lave et datetime-felt, og så indsætte NOW() for det felt, når du
> indsætter en række. Så behøver du ikke at bekymre dig om timestamps
> automatiske opdatering.
Mjah, jeg har forsøg, via phpMyAdmin, at ændre typen af kolonnen til
"DateTime" og så sætte standardværdien af kolonnen til "Now()" - Uden
anførselstegn, forstås. Det virker bare ikke. Når jeg indsætter en ny række,
uden eksplicit at tildele en værdi til DateTime-feltet via SQL, så bliver
værdien af feltet bare Null i stedet for det korrekte tidspunkt.
Kan man ikke automatisk, via en standardværdi for feltet, få indsat det
korrekte tidspunkt i et DateTime-felt? Skal man i sin SQL-sætning eksplicit
angive, at man vil indsætte det øjeblikkelige tidspunkt i kolonnen, når man
indsætter en ny række fra eksempelvis en web-applikation??
| |
Peter Brodersen (22-08-2004)
| Kommentar Fra : Peter Brodersen |
Dato : 22-08-04 21:49 |
|
On Sun, 22 Aug 2004 22:43:03 +0200, "Thomas Voller"
<voller@nospam-voller.dk> wrote:
>Mjah, jeg har forsøg, via phpMyAdmin, at ændre typen af kolonnen til
>"DateTime" og så sætte standardværdien af kolonnen til "Now()" - Uden
>anførselstegn, forstås. Det virker bare ikke.
Nej. Du skal explicit sætte det, i din INSERT-linje.
>Kan man ikke automatisk, via en standardværdi for feltet, få indsat det
>korrekte tidspunkt i et DateTime-felt?
Jo, vha. timestamp-typen, men så oplever du også dens øvrige natur,
som kan være uønsket.
> Skal man i sin SQL-sætning eksplicit
>angive, at man vil indsætte det øjeblikkelige tidspunkt i kolonnen, når man
>indsætter en ny række fra eksempelvis en web-applikation??
Ja (omend du blot angiver NOW() i dit insert-statement)
--
- Peter Brodersen
php -r 'print floor(8.2-0.2);'
perl -le 'print 5-4.9;'
| |
|
|