Razumevanje tipov podatkov o datumu in času v MySQL
Pri delu z MySQL lahko izbira ustrezne vrste podatkov za shranjevanje vrednosti datuma in časa znatno vpliva na zmogljivost in funkcionalnost vaše baze podatkov. Ta članek raziskuje razlike med tipoma podatkov DATETIME in TIMESTAMP ter podaja priporočila za njuno uporabo v strežniškem okolju PHP.
Razumevanje teh razlik vam bo pomagalo pri sprejemanju premišljenih odločitev za zasnovo sheme baze podatkov. Preučili bomo značilnosti obeh vrst podatkov, razpravljali o njunih prednostih in omejitvah ter ponudili praktične nasvete za izbiro pravega glede na vaše posebne potrebe in primere uporabe.
Ukaz | Opis |
---|---|
CREATE TABLE | Ustvari novo tabelo v bazi podatkov z določenimi stolpci in omejitvami. |
DATETIME | Shranjuje vrednosti datuma in časa brez časovnega pasu. Primerno za zgodovinske podatke. |
TIMESTAMP | Shranjuje vrednosti datuma in časa ter jih pretvori v UTC za shranjevanje in nazaj v lokalni čas za priklic. |
AUTO_INCREMENT | Samodejno ustvari edinstveno številko vsakič, ko je v tabelo vstavljen nov zapis. |
DEFAULT CURRENT_TIMESTAMP | Nastavi privzeto vrednost polja TIMESTAMP na trenutni datum in uro, ko je ustvarjen nov zapis. |
$conn->query($sql) | Izvede poizvedbo v bazi podatkov. Uporablja se za vstavljanje in iskanje podatkov. |
$conn->fetch_assoc() | Pridobi vrstico z rezultati kot asociativno polje, kjer so imena stolpcev ključi. |
Implementacija polj datuma in časa MySQL
Priloženi skripti prikazujejo, kako učinkovito uporabljati DATETIME in TIMESTAMP vrste podatkov v MySQL pri delu s PHP na strani strežnika. Prvi skript ustvari tabelo MySQL, imenovano events, ki vključuje dve polji datuma in časa: event_date in created_at. The DATETIME vrsta se uporablja za event_date za shranjevanje določenega datuma in časa dogodka brez upoštevanja časovnega pasu, zaradi česar je primeren za zgodovinske podatke. The TIMESTAMP vrsta se uporablja za created_at za samodejno sledenje, kdaj je vsak zapis ustvarjen, pretvorbo časa v UTC po shranjevanju in nazaj v lokalni čas po pridobitvi. To razlikovanje je ključnega pomena za aplikacije, ki morajo upoštevati časovne pasove. Drugi skript prikazuje, kako vstaviti podatke v events tabelo z uporabo PHP. Povezuje se z bazo MySQL, pripravi an INSERT stavek in ga izvede, da doda nov zapis dogodka. Povezava z bazo podatkov se vzpostavi s pomočjo new mysqli() in poizvedba se izvede z $conn->query($sql) metoda. Skript vključuje tudi obravnavo napak za zagotavljanje povratnih informacij, če povezava ne uspe ali če poizvedba naleti na težavo. Ta skript PHP zagotavlja, da so podatki o datumu in času pravilno oblikovani in vstavljeni v bazo podatkov.
Tretji skript pridobi in prikaže podatke iz events tabela. Ponovno se poveže z bazo podatkov, zažene a SELECT poizvedbo za pridobitev vseh zapisov in obdelavo rezultatov. The $result->fetch_assoc() se uporablja za pridobivanje vsake vrstice kot asociativne matrike, kar omogoča enostaven dostop do vrednosti stolpcev po njihovih imenih. Skript nato preleti nabor rezultatov in izpiše id, event_name, event_date, in created_at polja za vsak zapis. To prikazuje, kako obravnavati in prikazati podatke, shranjene v obeh DATETIME in TIMESTAMP formatih, ki zagotavljajo, da aplikacija pravilno interpretira in predstavlja informacije, povezane s časom.
Uporaba DATETIME in TIMESTAMP v MySQL
PHP in MySQL: Oblikovanje sheme baze podatkov
// 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.
Vstavljanje podatkov v tabelo MySQL
PHP in MySQL: skript za vstavljanje podatkov
<?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();
?>
Pridobivanje in prikazovanje podatkov
PHP in MySQL: pridobivanje in prikazovanje podatkov
<?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();
?>
Izbira med DATETIME in TIMESTAMP v MySQL
Ko se odločate med DATETIME in TIMESTAMP podatkovnih vrst v MySQL, je bistveno upoštevati njihove edinstvene značilnosti in kako se ujemajo z zahtevami vaše aplikacije. The DATETIME tip je idealen za shranjevanje datumov in ur, ki naj bi bili skladni v različnih časovnih pasovih, kot so zgodovinski zapisi ali datumi dogodkov, ki se ne smejo spreminjati ne glede na lokacijo uporabnika. To je zato, ker DATETIME ne upošteva časovnih pasov; shrani natančen datum in čas, kot sta bila vnesena, zaradi česar je preprosta za uporabo, vendar lahko povzroči težave, če je potrebna globalna doslednost.
Po drugi strani pa je TIMESTAMP type je zasnovan za shranjevanje časovnih vrednosti glede na UTC in jih samodejno pretvori v časovni pas strežnika po pridobitvi. To naredi TIMESTAMP še posebej uporabno za sledenje spremembam, kot je ustvarjanje zapisov ali čas posodabljanja, saj zagotavlja doslednost v različnih časovnih pasovih. Pri delu z PHP, z uporabo TIMESTAMP lahko poenostavi upravljanje razlik v časovnih pasovih, kar uporabnikom olajša predstavitev točnih lokalnih časov. vendar TIMESTAMP ima bolj omejen obseg v primerjavi z DATETIME, ki podpira samo datume od 1970 do 2038, kar bi lahko veljalo za dolgoročne aplikacije.
Pogosta vprašanja in odgovori o MySQL DATETIME in TIMESTAMP
- Kakšna je glavna razlika med DATETIME in TIMESTAMP v MySQL?
- DATETIME shrani datum in uro, kot sta, medtem ko TIMESTAMP shrani v UTC in pretvori v časovni pas strežnika.
- Katero vrsto podatkov naj uporabim za beleženje datumov dogodkov?
- DATETIME je boljša za datume dogodkov, saj ohranja doslednost med časovnimi pasovi.
- Kateri tip podatkov je najboljši za sledenje času ustvarjanja zapisa?
- TIMESTAMP je idealen za sledenje časom ustvarjanja, ker samodejno uporablja trenutni čas in se prilagaja časovnim pasom.
- Kako MySQL obravnava časovne pasove s TIMESTAMP?
- MySQL trgovine TIMESTAMP vrednosti v UTC in jih po pridobitvi pretvori v trenutni časovni pas.
- Ali lahko s funkcijo TIMESTAMP shranim datume pred letom 1970?
- ne, TIMESTAMP podpira samo datume med 1970 in 2038. Uporabite DATETIME za datume zunaj tega obsega.
- Ali se TIMESTAMP samodejno posodobi ob spremembah zapisa?
- Da, če je opredeljeno z DEFAULT CURRENT_TIMESTAMP in ON UPDATE CURRENT_TIMESTAMP, ČASOVNI ŽIG se samodejno posodobi.
- Kaj se zgodi, če v polje DATETIME vstavim neveljaven datum?
- MySQL bo vstavil '0000-00-00 00:00:00', če je datum neveljaven, odvisno od načina SQL.
- Kako lahko zagotovim doslednost shranjevanja časa na različnih strežnikih?
- Uporaba TIMESTAMP zagotavlja časovno doslednost, saj vse čase pretvori v UTC.
- Ali lahko uporabljam funkcije z DATETIME in TIMESTAMP?
- Da, MySQL deluje kot NOW() in CURRENT_TIMESTAMP delo z obema vrstama podatkov.
- Katera vrsta podatkov je bolj učinkovita pri shranjevanju?
- TIMESTAMP je bolj učinkovit pri shranjevanju, saj uporablja 4 bajte v primerjavi z 8 bajti DATETIME.
Končne misli o vrstah datuma in časa MySQL
Skratka oboje DATETIME in TIMESTAMP podatkovni tipi imajo svoje mesto v oblikovanju baze podatkov MySQL. DATETIME je prednostna za zgodovinske zapise ali kadar je doslednost časovnega pasu ključnega pomena, medtem ko TIMESTAMP je ugoden za sledenje spremembam s samodejno pretvorbo UTC. Vaša izbira mora biti usklajena s posebnimi potrebami vaše aplikacije, da zagotovite natančno in učinkovito obravnavo datuma in časa.