Välja mellan DATETIME och TIMESTAMP i MySQL för PHP-utveckling

Välja mellan DATETIME och TIMESTAMP i MySQL för PHP-utveckling
Välja mellan DATETIME och TIMESTAMP i MySQL för PHP-utveckling

Förstå datatyper för datum och tid i MySQL

När du arbetar med MySQL kan valet av lämplig datatyp för lagring av datum- och tidsvärden avsevärt påverka din databas prestanda och funktionalitet. Den här artikeln utforskar skillnaderna mellan datatyperna DATETIME och TIMESTAMP och ger rekommendationer för deras användning i en PHP-servermiljö.

Att förstå dessa distinktioner hjälper dig att fatta välgrundade beslut för din databasschemadesign. Vi kommer att undersöka egenskaperna hos båda datatyperna, diskutera deras fördelar och begränsningar och ge praktiska råd för att välja rätt baserat på dina specifika behov och användningsfall.

Kommando Beskrivning
CREATE TABLE Skapar en ny tabell i databasen med specificerade kolumner och begränsningar.
DATETIME Lagrar datum- och tidsvärden utan tidszon. Lämplig för historiska data.
TIMESTAMP Lagrar datum- och tidsvärden, konverterar dem till UTC för lagring och tillbaka till lokal tid för hämtning.
AUTO_INCREMENT Genererar ett unikt nummer automatiskt när en ny post infogas i tabellen.
DEFAULT CURRENT_TIMESTAMP Ställer in standardvärdet för TIMESTAMP-fältet till aktuellt datum och tid när en ny post skapas.
$conn->query($sql) Kör en fråga mot databasen. Används för både infogning och hämtning av data.
$conn->fetch_assoc() Hämtar en resultatrad som en associativ array, där kolumnnamn är nycklarna.

Implementera MySQL datum- och tidsfält

Skripten som tillhandahålls visar hur man effektivt använder DATETIME och TIMESTAMP datatyper i MySQL när man arbetar med PHP på serversidan. Det första skriptet skapar en MySQL-tabell som heter events, som inkluderar två datum- och tidsfält: event_date och created_at. De DATETIME typ används för event_date för att lagra det specifika datumet och tiden för en händelse utan tidszonsöverväganden, vilket gör den lämplig för historisk data. De TIMESTAMP typ används för created_at för att automatiskt spåra när varje post skapas, konvertera tiden till UTC vid lagring och tillbaka till lokal tid vid hämtning. Denna distinktion är avgörande för applikationer som måste ta hänsyn till tidszoner. Det andra skriptet illustrerar hur man infogar data i events tabell med PHP. Den ansluter till MySQL-databasen, förbereder en INSERT och kör den för att lägga till en ny händelsepost. Anslutningen till databasen upprättas med hjälp av new mysqli() funktion, och frågan exekveras med $conn->query($sql) metod. Skriptet inkluderar också felhantering för att ge feedback om anslutningen misslyckas eller frågan stöter på ett problem. Detta PHP-skript säkerställer att datum- och tidsdata är korrekt formaterade och infogade i databasen.

Det tredje skriptet hämtar och visar data från events tabell. Den ansluter igen till databasen, kör en SELECT fråga för att hämta alla poster och bearbetar resultaten. De $result->fetch_assoc() funktionen används för att hämta varje rad som en associativ array, vilket ger enkel åtkomst till kolumnvärden efter deras namn. Skriptet går sedan igenom resultatuppsättningen och matar ut id, event_name, event_date, och created_at fält för varje post. Detta visar hur man hanterar och visar data lagrad i båda DATETIME och TIMESTAMP format, vilket säkerställer att applikationen tolkar och presenterar tidsrelaterad information korrekt.

Använder DATETIME och TIMESTAMP i MySQL

PHP och MySQL: Databasschemadesign

// 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.

Infoga data i MySQL-tabellen

PHP och MySQL: Datainsättningsskript

<?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();
?>

Hämta och visa data

PHP och MySQL: Hämta och visa 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();
?>

Välj mellan DATETIME och TIMESTAMP i MySQL

När man väljer mellan DATETIME och TIMESTAMP datatyper i MySQL är det viktigt att överväga deras unika egenskaper och hur de överensstämmer med din applikations krav. De DATETIME typen är idealisk för att lagra datum och tider som är avsedda att vara konsekventa över olika tidszoner, till exempel historiska poster eller händelsedatum som inte bör ändras oavsett var användaren befinner sig. Det här är för att DATETIME tar inte hänsyn till tidszoner; den lagrar exakt datum och tid som angetts, vilket gör det enkelt att använda men potentiellt problematiskt om global konsekvens behövs.

Å andra sidan TIMESTAMP typ är utformad för att lagra tidsvärden i förhållande till UTC, och automatiskt konvertera dem till serverns tidszon vid hämtning. Detta gör TIMESTAMP särskilt användbart för att spåra ändringar, som att skapa poster eller uppdateringstider, eftersom det säkerställer konsistens över olika tidszoner. När man arbetar med PHP, använder sig av TIMESTAMP kan förenkla hanteringen av tidszonsskillnader, vilket gör det lättare att presentera exakta lokala tider för användare. Dock, TIMESTAMP har ett mer begränsat utbud jämfört med DATETIME, endast stödjande datum från 1970 till 2038, vilket kan vara ett övervägande för långsiktiga ansökningar.

Vanliga frågor och svar om MySQL DATETIME och TIMESTAMP

  1. Vad är den största skillnaden mellan DATETIME och TIMESTAMP i MySQL?
  2. DATETIME lagrar datum och tid som de är, medan TIMESTAMP lagrar den i UTC och konverterar den till serverns tidszon.
  3. Vilken datatyp ska jag använda för att registrera händelsedatum?
  4. DATETIME är att föredra för händelsedatum eftersom det upprätthåller konsistens över tidszoner.
  5. Vilken datatyp är bäst för att spåra tider för att skapa poster?
  6. TIMESTAMP är idealisk för att spåra skapelsetider eftersom den automatiskt använder den aktuella tiden och justerar för tidszoner.
  7. Hur hanterar MySQL tidszoner med TIMESTAMP?
  8. MySQL-butiker TIMESTAMP värden i UTC och konverterar dem till den aktuella tidszonen vid hämtning.
  9. Kan jag lagra datum före 1970 med TIMESTAMP?
  10. Nej, TIMESTAMP stöder endast datum mellan 1970 och 2038. Använd DATETIME för datum utanför detta intervall.
  11. Uppdateras TIMESTAMP automatiskt vid poständringar?
  12. Ja, om det definieras med DEFAULT CURRENT_TIMESTAMP och ON UPDATE CURRENT_TIMESTAMP, TIMESTAMP uppdateras automatiskt.
  13. Vad händer om jag infogar ett ogiltigt datum i ett DATETIME-fält?
  14. MySQL kommer att infoga '0000-00-00 00:00:00' om datumet är ogiltigt, beroende på SQL-läget.
  15. Hur kan jag säkerställa konsekvens i tidslagring på olika servrar?
  16. Använder sig av TIMESTAMP säkerställer tidskonsistens eftersom den konverterar alla tider till UTC.
  17. Kan jag använda funktioner med DATETIME och TIMESTAMP?
  18. Ja, MySQL fungerar som NOW() och CURRENT_TIMESTAMP arbeta med båda datatyperna.
  19. Vilken datatyp är mer lagringseffektiv?
  20. TIMESTAMP är mer lagringseffektiv, använder 4 byte jämfört med DATETIMEs 8 byte.

Sista tankar om MySQL datum- och tidstyper

Sammanfattningsvis båda DATETIME och TIMESTAMP datatyper har sin plats i MySQL-databasdesign. DATETIME är att föredra för historiska poster eller när tidszonens konsekvens är avgörande, medan TIMESTAMP är fördelaktigt för att spåra ändringar med automatisk UTC-konvertering. Ditt val bör överensstämma med de specifika behoven i din applikation för att säkerställa korrekt och effektiv hantering av datum och tid.