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ć DATETIME I TIMESTAMP typy danych w MySQL podczas pracy z PHP po stronie serwera. Pierwszy skrypt tworzy tabelę MySQL o nazwie events, który zawiera dwa pola daty i godziny: event_date I created_at. The DATETIME typ jest używany event_date 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 created_at 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 events tabela przy użyciu PHP. Łączy się z bazą danych MySQL, przygotowuje plik INSERT 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ą $conn->query($sql) 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 events tabela. Ponownie łączy się z bazą danych, uruchamia plik a SELECT zapytanie, aby pobrać wszystkie rekordy i przetwarza wyniki. The $result->fetch_assoc() 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, event_name, event_date, I created_at pola dla każdego rekordu. To pokazuje, jak obsługiwać i wyświetlać dane przechowywane w obu przypadkach DATETIME I TIMESTAMP 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 DATETIME I TIMESTAMP typów danych w MySQL, należy wziąć pod uwagę ich unikalną charakterystykę i sposób, w jaki odpowiadają wymaganiom aplikacji. The DATETIME 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, TIMESTAMP typ jest przeznaczony do przechowywania wartości czasu względem UTC i automatycznego konwertowania ich na strefę czasową serwera po pobraniu. To sprawia TIMESTAMP 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 PHP, 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, TIMESTAMP ma bardziej ograniczony zasięg w porównaniu do DATETIME, podając jedynie daty od 1970 do 2038 r., które mogą być brane pod uwagę w przypadku wniosków długoterminowych.
Często zadawane pytania i odpowiedzi dotyczące MySQL DATETIME i TIMESTAMP
- Jaka jest główna różnica między DATETIME i TIMESTAMP w MySQL?
- DATETIME przechowuje datę i godzinę bez zmian, while TIMESTAMP przechowuje go w formacie UTC i konwertuje na strefę czasową serwera.
- Jakiego typu danych należy używać do rejestrowania dat wydarzeń?
- DATETIME jest preferowany w przypadku dat wydarzeń, ponieważ pozwala zachować spójność w różnych strefach czasowych.
- Jaki typ danych jest najlepszy do śledzenia czasu tworzenia rekordów?
- TIMESTAMP jest idealny do śledzenia czasów tworzenia, ponieważ automatycznie wykorzystuje bieżący czas i dostosowuje się do stref czasowych.
- W jaki sposób MySQL obsługuje strefy czasowe za pomocą TIMESTAMP?
- Sklepy MySQL TIMESTAMP wartości w formacie UTC i po pobraniu konwertuje je na bieżącą strefę czasową.
- Czy mogę przechowywać daty przed 1970 rokiem za pomocą TIMESTAMP?
- NIE, TIMESTAMP obsługuje tylko daty z zakresu od 1970 do 2038. Użyj DATETIME dla dat spoza tego zakresu.
- Czy TIMESTAMP automatycznie aktualizuje się po zmianach rekordów?
- Tak, jeśli zdefiniowano za pomocą DEFAULT CURRENT_TIMESTAMP I ON UPDATE CURRENT_TIMESTAMP, TIMESTAMP aktualizuje się automatycznie.
- Co się stanie, jeśli wstawię nieprawidłową datę w polu DATETIME?
- MySQL wstawi „0000-00-00 00:00:00”, jeśli data jest nieprawidłowa, w zależności od trybu SQL.
- Jak mogę zapewnić spójność przechowywania czasu na różnych serwerach?
- Za pomocą TIMESTAMP zapewnia spójność czasu, ponieważ konwertuje wszystkie czasy na UTC.
- Czy mogę używać funkcji z DATETIME i TIMESTAMP?
- Tak, MySQL działa jak NOW() I CURRENT_TIMESTAMP pracować z obydwoma typami danych.
- Który typ danych jest bardziej wydajny w przechowywaniu?
- TIMESTAMP 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 DATETIME I TIMESTAMP typy danych mają swoje miejsce w projektowaniu baz danych MySQL. DATETIME 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.