Wybór pomiędzy DATETIME i TIMESTAMP w MySQL dla rozwoju PHP

PHP

Zrozumienie typów danych daty i godziny w MySQL

Podczas pracy z MySQL wybranie odpowiedniego typu danych do przechowywania wartości daty i godziny może znacząco wpłynąć na wydajność i funkcjonalność bazy danych. W tym artykule omówiono różnice między typami danych DATETIME i TIMESTAMP oraz przedstawiono zalecenia dotyczące ich użycia w środowisku po stronie serwera PHP.

Zrozumienie tych rozróżnień pomoże w podejmowaniu świadomych decyzji dotyczących projektu schematu bazy danych. Zbadamy cechy obu typów danych, omówimy ich zalety i ograniczenia oraz zaoferujemy praktyczne porady dotyczące wyboru właściwego w oparciu o Twoje konkretne potrzeby i przypadki użycia.

Komenda Opis
CREATE TABLE Tworzy nową tabelę w bazie danych z określonymi kolumnami i ograniczeniami.
DATETIME Przechowuje wartości daty i godziny bez strefy czasowej. Nadaje się do danych historycznych.
TIMESTAMP Przechowuje wartości daty i godziny, konwertując je na czas UTC w celu przechowywania i z powrotem na czas lokalny w celu pobrania.
AUTO_INCREMENT Generuje unikalny numer automatycznie za każdym razem, gdy do tabeli zostanie wstawiony nowy rekord.
DEFAULT CURRENT_TIMESTAMP Ustawia domyślną wartość pola TIMESTAMP na bieżącą datę i godzinę utworzenia nowego rekordu.
$conn->query($sql) Wykonuje zapytanie do bazy danych. Służy zarówno do wprowadzania, jak i pobierania danych.
$conn->fetch_assoc() Pobiera wiersz wyników jako tablicę asocjacyjną, gdzie kluczami są nazwy kolumn.

Implementacja pól daty i godziny w MySQL

Dostarczone skrypty pokazują, jak efektywnie używać I typy danych w MySQL podczas pracy z PHP po stronie serwera. Pierwszy skrypt tworzy tabelę MySQL o nazwie , który zawiera dwa pola daty i godziny: event_date I . The typ jest używany do przechowywania konkretnej daty i godziny wydarzenia bez uwzględniania strefy czasowej, dzięki czemu nadaje się do danych historycznych. The TIMESTAMP typ jest używany automatyczne śledzenie momentu utworzenia każdego rekordu, konwersja czasu na czas UTC podczas przechowywania i z powrotem na czas lokalny po pobraniu. To rozróżnienie ma kluczowe znaczenie w przypadku aplikacji, które muszą uwzględniać strefy czasowe. Drugi skrypt ilustruje sposób wstawiania danych do pliku tabela przy użyciu PHP. Łączy się z bazą danych MySQL, przygotowuje plik instrukcję i wykonuje ją, aby dodać nowy rekord zdarzenia. Połączenie z bazą danych nawiązywane jest za pomocą przycisku new mysqli() funkcję, a zapytanie jest wykonywane za pomocą metoda. Skrypt zawiera także obsługę błędów w celu przekazania informacji zwrotnej w przypadku niepowodzenia połączenia lub wystąpienia problemu z zapytaniem. Ten skrypt PHP zapewnia prawidłowe sformatowanie danych daty i godziny oraz ich wstawienie do bazy danych.

Trzeci skrypt pobiera i wyświetla dane z pliku tabela. Ponownie łączy się z bazą danych, uruchamia plik a zapytanie, aby pobrać wszystkie rekordy i przetwarza wyniki. The Funkcja służy do pobrania każdego wiersza jako tablicy asocjacyjnej, umożliwiając łatwy dostęp do wartości kolumn według ich nazw. Następnie skrypt przechodzi przez zestaw wyników, generując wynik id, , , I pola dla każdego rekordu. To pokazuje, jak obsługiwać i wyświetlać dane przechowywane w obu przypadkach DATETIME I formatach, zapewniając, że aplikacja poprawnie interpretuje i prezentuje informacje związane z czasem.

Używanie DATETIME i TIMESTAMP w MySQL

PHP i MySQL: Projektowanie schematu bazy danych

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

Wstawianie danych do tabeli MySQL

PHP i MySQL: Skrypt wstawiania danych

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

Pobieranie i wyświetlanie danych

PHP i MySQL: pobieranie i wyświetlanie danych

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

Wybór pomiędzy DATETIME i TIMESTAMP w MySQL

Decydując się pomiędzy I typów danych w MySQL, należy wziąć pod uwagę ich unikalną charakterystykę i sposób, w jaki odpowiadają wymaganiom aplikacji. The typ jest idealny do przechowywania dat i godzin, które mają być spójne w różnych strefach czasowych, takich jak zapisy historyczne lub daty wydarzeń, które nie powinny się zmieniać niezależnie od lokalizacji użytkownika. To dlatego, że DATETIME nie uwzględnia stref czasowych; przechowuje dokładną wprowadzoną datę i godzinę, dzięki czemu jest prosty w użyciu, ale potencjalnie problematyczny, jeśli wymagana jest globalna spójność.

Z drugiej strony, typ jest przeznaczony do przechowywania wartości czasu względem UTC i automatycznego konwertowania ich na strefę czasową serwera po pobraniu. To sprawia szczególnie przydatny do śledzenia zmian, takich jak czasy tworzenia rekordów lub aktualizacji, ponieważ zapewnia spójność w różnych strefach czasowych. Podczas pracy z , za pomocą TIMESTAMP może uprościć zarządzanie różnicami w strefach czasowych, ułatwiając prezentowanie użytkownikom dokładnych czasów lokalnych. Jednakże, ma bardziej ograniczony zasięg w porównaniu do , podając jedynie daty od 1970 do 2038 r., które mogą być brane pod uwagę w przypadku wniosków długoterminowych.

  1. Jaka jest główna różnica między DATETIME i TIMESTAMP w MySQL?
  2. przechowuje datę i godzinę bez zmian, while przechowuje go w formacie UTC i konwertuje na strefę czasową serwera.
  3. Jakiego typu danych należy używać do rejestrowania dat wydarzeń?
  4. jest preferowany w przypadku dat wydarzeń, ponieważ pozwala zachować spójność w różnych strefach czasowych.
  5. Jaki typ danych jest najlepszy do śledzenia czasu tworzenia rekordów?
  6. jest idealny do śledzenia czasów tworzenia, ponieważ automatycznie wykorzystuje bieżący czas i dostosowuje się do stref czasowych.
  7. W jaki sposób MySQL obsługuje strefy czasowe za pomocą TIMESTAMP?
  8. Sklepy MySQL wartości w formacie UTC i po pobraniu konwertuje je na bieżącą strefę czasową.
  9. Czy mogę przechowywać daty przed 1970 rokiem za pomocą TIMESTAMP?
  10. NIE, obsługuje tylko daty z zakresu od 1970 do 2038. Użyj dla dat spoza tego zakresu.
  11. Czy TIMESTAMP automatycznie aktualizuje się po zmianach rekordów?
  12. Tak, jeśli zdefiniowano za pomocą I , TIMESTAMP aktualizuje się automatycznie.
  13. Co się stanie, jeśli wstawię nieprawidłową datę w polu DATETIME?
  14. MySQL wstawi „0000-00-00 00:00:00”, jeśli data jest nieprawidłowa, w zależności od trybu SQL.
  15. Jak mogę zapewnić spójność przechowywania czasu na różnych serwerach?
  16. Za pomocą zapewnia spójność czasu, ponieważ konwertuje wszystkie czasy na UTC.
  17. Czy mogę używać funkcji z DATETIME i TIMESTAMP?
  18. Tak, MySQL działa jak I pracować z obydwoma typami danych.
  19. Który typ danych jest bardziej wydajny w przechowywaniu?
  20. jest bardziej wydajny w przechowywaniu, wykorzystując 4 bajty w porównaniu do 8 bajtów DATETIME.

Końcowe przemyślenia na temat typów daty i godziny w MySQL

Podsumowując, jedno i drugie I typy danych mają swoje miejsce w projektowaniu baz danych MySQL. jest preferowany w przypadku danych historycznych lub gdy spójność stref czasowych ma kluczowe znaczenie, natomiast TIMESTAMP jest korzystny do śledzenia zmian z automatyczną konwersją UTC. Twój wybór powinien być zgodny ze specyficznymi potrzebami Twojej aplikacji, aby zapewnić dokładną i efektywną obsługę daty i godziny.