الاختيار بين DATETIME وTIMESTAMP في MySQL لتطوير PHP

PHP

فهم أنواع بيانات التاريخ والوقت في MySQL

عند العمل مع MySQL، فإن تحديد نوع البيانات المناسب لتخزين قيم التاريخ والوقت يمكن أن يؤثر بشكل كبير على أداء قاعدة البيانات ووظائفها. تستكشف هذه المقالة الاختلافات بين أنواع البيانات DATETIME وTIMESTAMP وتقدم توصيات لاستخدامها في بيئة PHP من جانب الخادم.

سيساعدك فهم هذه الفروق على اتخاذ قرارات مستنيرة لتصميم مخطط قاعدة البيانات الخاصة بك. سنفحص خصائص كلا النوعين من البيانات، ونناقش مزاياهما وقيودهما، ونقدم نصائح عملية لاختيار النوع المناسب بناءً على احتياجاتك وحالات الاستخدام الخاصة بك.

يأمر وصف
CREATE TABLE إنشاء جدول جديد في قاعدة البيانات بأعمدة وقيود محددة.
DATETIME يخزن قيم التاريخ والوقت بدون منطقة زمنية. مناسبة للبيانات التاريخية.
TIMESTAMP يخزن قيم التاريخ والوقت، ويحولها إلى التوقيت العالمي المنسق (UTC) للتخزين والعودة إلى التوقيت المحلي للاسترجاع.
AUTO_INCREMENT يقوم بإنشاء رقم فريد تلقائيًا عند إدراج سجل جديد في الجدول.
DEFAULT CURRENT_TIMESTAMP يضبط القيمة الافتراضية لحقل الطابع الزمني على التاريخ والوقت الحاليين عند إنشاء سجل جديد.
$conn->query($sql) تنفيذ استعلام ضد قاعدة البيانات. يستخدم لإدخال البيانات واسترجاعها.
$conn->fetch_assoc() جلب صف نتيجة كمصفوفة ترابطية، حيث تكون أسماء الأعمدة هي المفاتيح.

تنفيذ حقول التاريخ والوقت في MySQL

توضح البرامج النصية المقدمة كيفية الاستخدام الفعال و أنواع البيانات في MySQL عند العمل مع PHP على جانب الخادم. يقوم البرنامج النصي الأول بإنشاء جدول MySQL يسمى ، والذي يتضمن حقلين للتاريخ والوقت: event_date و . ال النوع يستخدم ل لتخزين التاريخ والوقت المحددين لحدث ما دون اعتبارات المنطقة الزمنية، مما يجعله مناسبًا للبيانات التاريخية. ال TIMESTAMP النوع يستخدم ل لتتبع وقت إنشاء كل سجل تلقائيًا، وتحويل الوقت إلى التوقيت العالمي المنسق (UTC) عند التخزين والعودة إلى التوقيت المحلي عند الاسترجاع. يعد هذا التمييز أمرًا بالغ الأهمية للتطبيقات التي تحتاج إلى مراعاة المناطق الزمنية. يوضح البرنامج النصي الثاني كيفية إدراج البيانات في ملف الجدول باستخدام PHP. فهو يتصل بقاعدة بيانات MySQL، ويعد ملفًا البيان، وينفذه لإضافة سجل حدث جديد. يتم إنشاء الاتصال بقاعدة البيانات باستخدام new mysqli() الدالة، ويتم تنفيذ الاستعلام باستخدام الدالة طريقة. يتضمن البرنامج النصي أيضًا معالجة الأخطاء لتقديم تعليقات في حالة فشل الاتصال أو واجه الاستعلام مشكلة. يضمن برنامج PHP النصي تنسيق بيانات التاريخ والوقت بشكل صحيح وإدراجها في قاعدة البيانات.

يقوم البرنامج النصي الثالث باسترداد البيانات وعرضها من ملف طاولة. يتصل مرة أخرى بقاعدة البيانات، ويقوم بتشغيل ملف استعلام لجلب كافة السجلات، ومعالجة النتائج. ال يتم استخدام الدالة لجلب كل صف كمصفوفة ترابطية، مما يتيح سهولة الوصول إلى قيم الأعمدة بأسمائها. يقوم البرنامج النصي بعد ذلك بالتكرار خلال مجموعة النتائج، مما يؤدي إلى إخراج ملف id, , ، و الحقول لكل سجل. يوضح هذا كيفية التعامل مع البيانات المخزنة في كليهما وعرضها DATETIME و التنسيقات، مما يضمن أن التطبيق يفسر المعلومات المتعلقة بالوقت ويقدمها بشكل صحيح.

استخدام 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

عند الاختيار بين و أنواع البيانات في MySQL، من الضروري مراعاة خصائصها الفريدة وكيفية توافقها مع متطلبات تطبيقك. ال يعتبر النوع مثاليًا لتخزين التواريخ والأوقات التي من المفترض أن تكون متسقة عبر مناطق زمنية مختلفة، مثل السجلات التاريخية أو تواريخ الأحداث التي يجب ألا تتغير بغض النظر عن موقع المستخدم. هذا بسبب DATETIME لا يأخذ المناطق الزمنية بعين الاعتبار؛ فهو يخزن التاريخ والوقت الدقيقين كما تم إدخالهما، مما يجعل استخدامه سهلاً ولكنه قد يسبب مشكلة إذا كانت هناك حاجة إلى الاتساق العالمي.

ومن ناحية أخرى فإن تم تصميم النوع لتخزين قيم الوقت المتعلقة بالتوقيت العالمي المنسق (UTC)، وتحويلها تلقائيًا إلى المنطقة الزمنية للخادم عند استرجاعها. هذا يجعل مفيد بشكل خاص لتتبع التغييرات، مثل أوقات إنشاء السجل أو التحديث، لأنه يضمن الاتساق عبر المناطق الزمنية المختلفة. عند العمل مع ، استخدام TIMESTAMP يمكنه تبسيط إدارة اختلافات المنطقة الزمنية، مما يسهل تزويد المستخدمين بأوقات محلية دقيقة. لكن، لديه نطاق محدود أكثر مقارنة بـ ، يدعم فقط التواريخ من 1970 إلى 2038، والتي قد تكون أحد الاعتبارات للتطبيقات طويلة المدى.

  1. ما هو الفرق الرئيسي بين DATETIME و TIMESTAMP في MySQL؟
  2. يخزن التاريخ والوقت كما هو، بينما يخزنها بالتوقيت العالمي المنسق (UTC) ويحولها إلى المنطقة الزمنية للخادم.
  3. ما نوع البيانات الذي يجب استخدامه لتسجيل تواريخ الأحداث؟
  4. يُفضل استخدام تواريخ الأحداث لأنها تحافظ على الاتساق عبر المناطق الزمنية.
  5. ما هو نوع البيانات الأفضل لتتبع أوقات إنشاء السجل؟
  6. يعد مثاليًا لتتبع أوقات الإنشاء لأنه يستخدم الوقت الحالي تلقائيًا ويضبطه حسب المناطق الزمنية.
  7. كيف يتعامل MySQL مع المناطق الزمنية باستخدام TIMESTAMP؟
  8. مخازن ماي إس كيو إل القيم بالتوقيت العالمي المنسق (UTC) وتحويلها إلى المنطقة الزمنية الحالية عند استرجاعها.
  9. هل يمكنني تخزين التواريخ قبل عام 1970 باستخدام TIMESTAMP؟
  10. لا، يدعم فقط التواريخ بين 1970 و2038. استخدم للتواريخ خارج هذا النطاق.
  11. هل يتم تحديث TIMESTAMP تلقائيًا عند حدوث تغييرات في السجل؟
  12. نعم، إذا تم تعريفها بـ و ، يتم تحديث TIMESTAMP تلقائيًا.
  13. ماذا يحدث إذا قمت بإدراج تاريخ غير صالح في حقل DATETIME؟
  14. سيقوم MySQL بإدراج "0000-00-00 00:00:00" إذا كان التاريخ غير صالح، اعتمادًا على وضع SQL.
  15. كيف يمكنني ضمان الاتساق في تخزين الوقت عبر خوادم مختلفة؟
  16. استخدام يضمن اتساق الوقت لأنه يحول جميع الأوقات إلى التوقيت العالمي المنسق (UTC).
  17. هل يمكنني استخدام الوظائف مع DATETIME وTIMESTAMP؟
  18. نعم، وظائف MySQL مثل و العمل مع كلا النوعين من البيانات.
  19. ما هو نوع البيانات الأكثر كفاءة في التخزين؟
  20. يعد أكثر كفاءة في التخزين، حيث يستخدم 4 بايت مقارنة بـ 8 بايت في DATETIME.

الأفكار النهائية حول أنواع التاريخ والوقت في MySQL

وفي الختام، على حد سواء و أنواع البيانات لها مكانها في تصميم قاعدة بيانات MySQL. يُفضل للسجلات التاريخية أو عندما يكون اتساق المنطقة الزمنية أمرًا بالغ الأهمية، بينما TIMESTAMP يعد مفيدًا لتتبع التغييرات من خلال التحويل التلقائي لتوقيت UTC. يجب أن يتوافق اختيارك مع الاحتياجات المحددة لتطبيقك لضمان معالجة دقيقة وفعالة للتاريخ والوقت.