01. maj 2003 - 10:09Der er
2 kommentarer og 2 løsninger
TIMESTAMP(14) NOT NULL
Jeg sidder og roder med et PHP-modul som henter en timestamp-værdi fra en MYSQL-DB. Problemet er bare at timestamp bliver opdateret med aktuel dato og tid, hvilket den IKKE skal. Jeg har fundet frem til at det skyldes at TIMESTAMP(14)-rækken i databasen ikke er sat til "NOT NULL", men hver gang jeg forsøger at sætte den til NOT NULL lykkedes det ikke. Jeg har både prøvet fra "mysql-prompten" samt fra mysql-front - ingen af delene virker. Er det virkelig umuligt at gøre hvad jeg forsøger eller findes der et hack til det? (jeg vil helst undgå sætte rækketypen til datetime-format).
Hver gang en record bliver ændret på en eller anden måde, så bliver timestamp-feltet opdateret automatisk. Hvis du ønsker, at dette felt skal kun opdateres en gang, så skal du bruge INT(14) i stedet for. Og lægge tal automatisk ind ved at skrive
INSERT INTO tbl (timestamp) values (date_format(now(),'%Y%m%d%h%i%s') - så bliver den indsat med current date/time og ikke bliver opdateret igen, hvis der sker ændringer igen i recorden.
"Problemet" med TIMESTAMP felter i MySQL er, at det første TIMESTAMP felt i en tabel ALTID bliver opdateret når du opdaterer tabellen, medmindre du angiver feltet selv.
Der er umiddelbart 2 løsninger.
1. Ændrer feltet fra TIMESTAMP til DATETIME.
2. Tilpas dine UPDATE's således at dit TIMESTAMP felt tildeles den eksisterende værdi: UPDATE dintabel SET (dine opdateringer) , dittimestampfelt=dittimestampfelt WHERE (dine kriterier)
Hvorfor vil du helst ikke bruge DATETIME formatet forresten? Jeg bruger stort set kun denne datatype til datoer, netop pga. TIMESTAMP's automatiske opdatering.
Det er derimod en rigtig dårlig ide at benytte INT(14), hvis du ønsker at bruge feltet til datoer. (du mister muligheden for at hente/sortere/beregne på de enkelt felter i datoen, samt at få datoen formatteret som du ønsker på udskriftstidspunktet).
Tak for Jeres svar begge to. Grunden til at jeg ikke ville benytte DATETIME i databasen var, at mit PHP-script er tilpasset TIMESTAMP-formatet. Scriptet bruger TIMESTAMP som en input-parameter, og udskriver herefter navnet på dagen, måneden osv. så det ser pænt ud. Efter konverteringen til DATETIME fucker det lidt up, men det problem løser jeg nemt :-)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.