Velge mellom DATETIME og TIMESTAMP i MySQL for PHP-utvikling

PHP

Forstå datatyper for dato og klokkeslett i MySQL

Når du arbeider med MySQL, kan valg av riktig datatype for lagring av dato- og klokkeslettverdier påvirke databasens ytelse og funksjonalitet betydelig. Denne artikkelen utforsker forskjellene mellom datatyper DATETIME og TIMESTAMP og gir anbefalinger for bruk av dem i et PHP-serversidemiljø.

Å forstå disse forskjellene vil hjelpe deg med å ta informerte beslutninger for utformingen av databaseskjemaet. Vi vil undersøke egenskapene til begge datatypene, diskutere fordeler og begrensninger, og gi praktiske råd for å velge den riktige basert på dine spesifikke behov og brukstilfeller.

Kommando Beskrivelse
CREATE TABLE Oppretter en ny tabell i databasen med spesifiserte kolonner og begrensninger.
DATETIME Lagrer dato- og klokkeslettverdier uten tidssone. Egnet for historiske data.
TIMESTAMP Lagrer dato- og klokkeslettverdier, konverterer dem til UTC for lagring og tilbake til lokal tid for henting.
AUTO_INCREMENT Genererer et unikt nummer automatisk hver gang en ny post settes inn i tabellen.
DEFAULT CURRENT_TIMESTAMP Setter standardverdien for TIMESTAMP-feltet til gjeldende dato og klokkeslett når en ny post opprettes.
$conn->query($sql) Utfører en spørring mot databasen. Brukes til både datainnsetting og gjenfinning.
$conn->fetch_assoc() Henter en resultatrad som en assosiativ matrise, der kolonnenavn er nøklene.

Implementering av MySQL dato- og klokkeslettfelt

Skriptene som følger med demonstrerer hvordan du bruker effektivt og datatyper i MySQL når du arbeider med PHP på serversiden. Det første skriptet lager en MySQL-tabell kalt , som inkluderer to dato- og klokkeslettfelt: event_date og . De type brukes til å lagre den spesifikke datoen og klokkeslettet for en hendelse uten tidssonebetraktninger, noe som gjør den egnet for historiske data. De TIMESTAMP type brukes til for automatisk å spore når hver post opprettes, konvertere tiden til UTC ved lagring og tilbake til lokal tid ved henting. Denne forskjellen er avgjørende for applikasjoner som må ta hensyn til tidssoner. Det andre skriptet illustrerer hvordan du setter inn data i tabell ved hjelp av PHP. Den kobles til MySQL-databasen, forbereder en setningen, og kjører den for å legge til en ny hendelsespost. Tilkoblingen til databasen opprettes ved hjelp av new mysqli() funksjon, og spørringen utføres med metode. Skriptet inkluderer også feilhåndtering for å gi tilbakemelding hvis tilkoblingen mislykkes eller spørringen støter på et problem. Dette PHP-skriptet sikrer at dato- og klokkeslettdata er riktig formatert og satt inn i databasen.

Det tredje skriptet henter og viser data fra bord. Den kobles igjen til databasen, kjører en spørring for å hente alle poster, og behandler resultatene. De funksjonen brukes til å hente hver rad som en assosiativ matrise, som gir enkel tilgang til kolonneverdier etter navn. Skriptet går deretter gjennom resultatsettet og sender ut id, , , og felt for hver post. Dette viser hvordan du håndterer og viser data som er lagret i begge DATETIME og formater, for å sikre at applikasjonen tolker og presenterer tidsrelatert informasjon riktig.

Bruker DATETIME og TIMESTAMP i MySQL

PHP og MySQL: Database Schema Design

// Backend: Creating a MySQL Table with DATETIME and TIMESTAMP fields
CREATE TABLE events (
    id INT AUTO_INCREMENT PRIMARY KEY,
    event_name VARCHAR(100) NOT ,
    event_date DATETIME NOT ,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
// Explanation:
// 'event_date' uses DATETIME to store the date and time of the event.
// 'created_at' uses TIMESTAMP to automatically track the record creation time.

Sette inn data i MySQL-tabellen

PHP og MySQL: Datainnsettingsskript

//php
// Backend: PHP Script to Insert Data into the MySQL Table
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "database_name";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
$event_name = "Sample Event";
$event_date = "2024-07-10 12:00:00";
$sql = "INSERT INTO events (event_name, event_date)
VALUES ('$event_name', '$event_date')";
if ($conn->query($sql) === TRUE) {
    echo "New record created successfully";
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}
$conn->close();
//

Hente og vise data

PHP og MySQL: Henting og visning av data

//php
// Backend: PHP Script to Retrieve and Display Data from MySQL Table
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT id, event_name, event_date, created_at FROM events";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        echo "id: " . $row["id"]. " - Name: " . $row["event_name"].
             " - Event Date: " . $row["event_date"].
             " - Created At: " . $row["created_at"]. "<br>";
    }
} else {
    echo "0 results";
}
$conn->close();
//

Velg mellom DATETIME og TIMESTAMP i MySQL

Når man skal velge mellom og datatyper i MySQL, er det viktig å vurdere deres unike egenskaper og hvordan de stemmer overens med applikasjonens krav. De type er ideell for lagring av datoer og klokkeslett som er ment å være konsistente på tvers av forskjellige tidssoner, for eksempel historiske poster eller hendelsesdatoer som ikke skal endres uavhengig av brukerens plassering. Dette er fordi DATETIME tar ikke hensyn til tidssoner; den lagrer nøyaktig dato og klokkeslett som angitt, noe som gjør det enkelt å bruke, men potensielt problematisk hvis global konsistens er nødvendig.

På den annen side type er designet for å lagre tidsverdier i forhold til UTC, og konvertere dem automatisk til serverens tidssone ved henting. Dette gjør spesielt nyttig for å spore endringer, for eksempel opprettelse av poster eller oppdateringstider, siden det sikrer konsistens på tvers av forskjellige tidssoner. Når du jobber med , ved hjelp av TIMESTAMP kan forenkle håndteringen av tidssoneforskjeller, noe som gjør det enklere å presentere nøyaktige lokale tider til brukere. Derimot, har en mer begrenset rekkevidde i forhold til , som kun støtter datoer fra 1970 til 2038, som kan være en vurdering for langsiktige søknader.

  1. Hva er hovedforskjellen mellom DATETIME og TIMESTAMP i MySQL?
  2. lagrer dato og klokkeslett som de er, mens lagrer det i UTC og konverterer det til serverens tidssone.
  3. Hvilken datatype bør jeg bruke for å registrere hendelsesdatoer?
  4. er å foretrekke for hendelsesdatoer da den opprettholder konsistens på tvers av tidssoner.
  5. Hvilken datatype er best for å spore registreringsopprettingstider?
  6. er ideell for å spore opprettelsestider fordi den automatisk bruker gjeldende tid og justerer for tidssoner.
  7. Hvordan håndterer MySQL tidssoner med TIMESTAMP?
  8. MySQL-butikker verdier i UTC og konverterer dem til gjeldende tidssone ved henting.
  9. Kan jeg lagre datoer før 1970 ved å bruke TIMESTAMP?
  10. Nei, støtter kun datoer mellom 1970 og 2038. Bruk for datoer utenfor dette området.
  11. Oppdateres TIMESTAMP automatisk ved postendringer?
  12. Ja, hvis definert med og , TIMESTAMP oppdateres automatisk.
  13. Hva skjer hvis jeg setter inn en ugyldig dato i et DATETIME-felt?
  14. MySQL vil sette inn '0000-00-00 00:00:00' hvis datoen er ugyldig, avhengig av SQL-modus.
  15. Hvordan kan jeg sikre konsistens i tidslagring på tvers av forskjellige servere?
  16. Ved hjelp av sikrer tidskonsistens ettersom den konverterer alle tider til UTC.
  17. Kan jeg bruke funksjoner med DATETIME og TIMESTAMP?
  18. Ja, MySQL fungerer som og arbeide med begge datatypene.
  19. Hvilken datatype er mer lagringseffektiv?
  20. er mer lagringseffektiv ved å bruke 4 byte sammenlignet med DATETIMEs 8 byte.

Siste tanker om MySQL-dato- og tidstyper

Avslutningsvis, begge deler og datatyper har sin plass i MySQL-databasedesign. foretrekkes for historiske poster eller når tidssonekonsistens er avgjørende, mens TIMESTAMP er fordelaktig for sporing av endringer med automatisk UTC-konvertering. Ditt valg bør samsvare med de spesifikke behovene til applikasjonen din for å sikre nøyaktig og effektiv dato- og klokkesletthåndtering.