Вибір між DATETIME і TIMESTAMP у MySQL для розробки PHP

Вибір між DATETIME і TIMESTAMP у MySQL для розробки PHP
Вибір між DATETIME і TIMESTAMP у MySQL для розробки PHP

Розуміння типів даних дати та часу в MySQL

Під час роботи з MySQL вибір відповідного типу даних для зберігання значень дати й часу може значно вплинути на продуктивність і функціональність вашої бази даних. У цій статті розглядаються відмінності між типами даних DATETIME і TIMESTAMP і надаються рекомендації щодо їх використання в серверному середовищі PHP.

Розуміння цих відмінностей допоможе вам приймати зважені рішення щодо дизайну схеми бази даних. Ми розглянемо характеристики обох типів даних, обговоримо їхні переваги та обмеження, а також запропонуємо практичні поради щодо вибору правильного на основі ваших конкретних потреб і випадків використання.

Команда опис
CREATE TABLE Створює нову таблицю в базі даних із зазначеними стовпцями та обмеженнями.
DATETIME Зберігає значення дати й часу без часового поясу. Підходить для історичних даних.
TIMESTAMP Зберігає значення дати й часу, перетворюючи їх на UTC для зберігання та назад у місцевий час для отримання.
AUTO_INCREMENT Автоматично генерує унікальний номер кожного разу, коли в таблицю вставляється новий запис.
DEFAULT CURRENT_TIMESTAMP Встановлює значення за замовчуванням для поля TIMESTAMP на поточну дату й час, коли створюється новий запис.
$conn->query($sql) Виконує запит до бази даних. Використовується як для вставки, так і для пошуку даних.
$conn->fetch_assoc() Отримує рядок результату як асоціативний масив, де імена стовпців є ключами.

Реалізація полів дати та часу MySQL

Надані сценарії демонструють ефективне використання DATETIME і TIMESTAMP типи даних у MySQL при роботі з PHP на стороні сервера. Перший сценарій створює таблицю MySQL під назвою events, який містить два поля дати та часу: event_date і created_at. The DATETIME тип використовується для event_date зберігати конкретну дату й час події без урахування часового поясу, що робить його придатним для історичних даних. The TIMESTAMP тип використовується для created_at щоб автоматично відстежувати, коли кожен запис створюється, перетворюючи час у UTC під час зберігання та назад у місцевий час після отримання. Ця різниця має вирішальне значення для програм, які потребують обліку часових поясів. Другий сценарій ілюструє, як вставити дані в events таблицю за допомогою PHP. Він підключається до бази даних MySQL, готує INSERT і виконує його, щоб додати новий запис події. Підключення до бази даних встановлюється за допомогою new mysqli() і запит виконується за допомогою $conn->query($sql) метод. Сценарій також включає обробку помилок для надання зворотного зв’язку, якщо з’єднання не вдається або під час запиту виникає проблема. Цей сценарій PHP гарантує, що дата й час правильно відформатовані та вставлені в базу даних.

Третій сценарій отримує та відображає дані з events стіл. Він знову підключається до бази даних, запускає a SELECT запит для отримання всіх записів і обробки результатів. The $result->fetch_assoc() функція використовується для отримання кожного рядка як асоціативного масиву, що дозволяє легко отримати доступ до значень стовпців за їх іменами. Потім сценарій проходить через набір результатів, виводячи id, event_name, event_date, і created_at поля для кожного запису. Це демонструє, як обробляти та відображати дані, що зберігаються в обох DATETIME і TIMESTAMP форматів, гарантуючи, що програма правильно інтерпретує та представляє інформацію, пов’язану з часом.

Використання DATETIME та TIMESTAMP у MySQL

PHP і MySQL: проектування схеми бази даних

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

Вставлення даних у таблицю MySQL

PHP і MySQL: сценарій вставки даних

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

Отримання та відображення даних

PHP і MySQL: отримання та відображення даних

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

Вибір між DATETIME та TIMESTAMP у MySQL

Вирішуючи між DATETIME і TIMESTAMP типів даних у MySQL, важливо враховувати їхні унікальні характеристики та те, як вони відповідають вимогам вашої програми. The DATETIME тип ідеально підходить для зберігання дат і часу, які повинні бути узгодженими в різних часових поясах, наприклад, історичні записи або дати подій, які не повинні змінюватися незалежно від місця розташування користувача. Це відбувається тому DATETIME не враховує часові пояси; він зберігає точну дату й час у тому вигляді, як він введений, що робить його простим у використанні, але потенційно проблематичним, якщо потрібна глобальна узгодженість.

З іншого боку, TIMESTAMP тип призначений для зберігання значень часу відносно UTC, автоматично перетворюючи їх на часовий пояс сервера після отримання. Це робить TIMESTAMP особливо корисний для відстеження змін, таких як час створення запису або оновлення, оскільки забезпечує узгодженість у різних часових поясах. При роботі з PHP, використовуючи TIMESTAMP може спростити керування різницею часових поясів, полегшуючи надання користувачам точного місцевого часу. однак, TIMESTAMP має більш обмежений діапазон порівняно з DATETIME, підтримуючи лише дати з 1970 по 2038 рік, що може бути розглянутим для довгострокових програм.

Поширені запитання та відповіді щодо MySQL DATETIME та TIMESTAMP

  1. У чому головна відмінність між DATETIME і TIMESTAMP у MySQL?
  2. DATETIME зберігає дату й час як є, поки TIMESTAMP зберігає його у UTC і перетворює на часовий пояс сервера.
  3. Який тип даних слід використовувати для запису дат подій?
  4. DATETIME є кращим для дат подій, оскільки підтримує послідовність у різних часових поясах.
  5. Який тип даних найкращий для відстеження часу створення запису?
  6. TIMESTAMP ідеально підходить для відстеження часу створення, оскільки він автоматично використовує поточний час і коригує часові пояси.
  7. Як MySQL обробляє часові пояси за допомогою TIMESTAMP?
  8. Магазини MySQL TIMESTAMP значення у UTC і перетворює їх на поточний часовий пояс після отримання.
  9. Чи можу я зберігати дати до 1970 року за допомогою TIMESTAMP?
  10. Немає, TIMESTAMP підтримує лише дати між 1970 і 2038 роками. Використовуйте DATETIME для дат поза цим діапазоном.
  11. Чи автоматично оновлюється TIMESTAMP після змін запису?
  12. Так, якщо визначено с DEFAULT CURRENT_TIMESTAMP і ON UPDATE CURRENT_TIMESTAMP, TIMESTAMP оновлюється автоматично.
  13. Що станеться, якщо я вставлю недійсну дату в поле DATETIME?
  14. MySQL вставить «0000-00-00 00:00:00», якщо дата недійсна, залежно від режиму SQL.
  15. Як я можу забезпечити узгодженість зберігання часу на різних серверах?
  16. Використання TIMESTAMP забезпечує узгодженість часу, оскільки він перетворює весь час у UTC.
  17. Чи можна використовувати функції з DATETIME і TIMESTAMP?
  18. Так, MySQL працює як NOW() і CURRENT_TIMESTAMP працювати з обома типами даних.
  19. Який тип даних більш ефективний для зберігання?
  20. TIMESTAMP є більш ефективним для зберігання, використовуючи 4 байти порівняно з 8 байтами DATETIME.

Останні думки про типи дати та часу MySQL

На завершення обидва DATETIME і TIMESTAMP типи даних займають своє місце в дизайні бази даних MySQL. DATETIME є кращим для історичних записів або коли узгодженість часового поясу має вирішальне значення TIMESTAMP є вигідним для відстеження змін із автоматичним перетворенням UTC. Ваш вибір має відповідати конкретним потребам вашої програми, щоб забезпечити точну та ефективну обробку дати й часу.