[TYPO3-UG Dutch] formaat "TIMESTAMP" in databaseteballen

Jigal van Hemert jigal at xs4all.nl
Wed Apr 15 13:55:56 CEST 2009


> In de Typo3-tabellen in de database heeft vrijwel elke tabel een kolom
> "tstamp", met het gegevensformaat "UNSIGNED INT". In een aantal
> zelf-toegevoegde tabellen heb ik vooralsnog ook dat formaat gebruikt
> voor datum en tijd van laatste wijziging.
>
> Als ik in PhpMyAdmin of met PHP gegevens invoer of wijzig, wordt deze
> "tstamp"-waarde niet automatisch geüpdate.
Klopt; er is geen enkele aanleiding voor MySQL om een UNSIGNED INT
automatisch te wijzigen...

> Als alternatief heb ik in een
> zelfgemaakte tabel wat geëxperimenteerd. Als ik het gegevenstype van de
> kolom "tstamp" wijzig in "TIMESTAMP" en het attribuut van dezelfde kolom
> op "on update current_timestamp" zet, dan blijkt bij elke wijziging in
> de tabel de kolom "tstamp" datum en tijd van wijziging te bevatten, en
> wel weergegeven als "jjjj-mm-dd hh:mm:ss". Op zich is dat prima.

Ook dat is geheel gedocumenteerd in MySQL.

> De vraag is echter of PhpMyAdmin dit alleen zo in dit formaat
> *weergeeft*, of dat het in de database zelf als een dergelijke string is
> opgeslagen.

Hoogstwaarschijnlijk geen van beiden! Waarschijnlijk gebruikt MySQL als
intern formaat een unsigned int, maar wordt bij het exporteren van de data
dit geformateerd naar het formaat dat je in phpMyAdmin ziet. Als je via de
command line mysql client of via een eigen PHP script de data opvraagt zal
het een identiek formaat lijken te hebben.
Eigenlijk is het natuurlijk niet interessant hoe MySQL dit intern opslaat.

> Dit laatste roept de vraag op of in voorkomende gevallen een
> rechtstreeks compare-statement tussen enerzijds een 'tstamp'-waarde uit
> een Typo3-tabel ("UNSIGNED INT") en anderziujds een dergelijke waarde
> die als type "TIMESTAMP" is opgeslagen, nog wel mogelijk is.

Niet rechtstreeks. En het uitvoeren van een functie bij een vergelijking
kan op een grote tabel best traag worden.

> Ik wil nl. de vermelding van "Datum laatste wijziging" onderaan de
> webpagina's met op databasetabellen gebaseerde content automatisch
> aanpassen aan de datum en tijd van laatste wijziging van de voor die
> pagina gebruikte records uit de betreffende databasetabel.

Als het alleen om Content Elementen op de pagina gaat kun je gewoon met
een TypoScript een oplossing bouwen. De MAX(tstamp) van de records uit
tt_content met de huidige PID zou de 'laatste wijziging' moeten
voorstellen. Met strftime kun je je eigen datumweergave samenstellen.

Mocht je ook records die door content elementen gebruikt zijn, dan zul je
zelf moeten weten welke records dit betreft. TYPO3 heeft die kennis niet,
dat ligt bij de extensie zelf...

Wat dit overigens met het door MySQL laten bijwerken van een timestamp
veld te maken heeft ontgaat me.



-- 
Jigal van Hemert.



More information about the TYPO3-UG-dutch mailing list