في هذا الدرس 6تصفّح المواضيع
عندما يحتاج التطبيق إلى حفظ تاريخ تقويمي دون جزء الوقت مثل تاريخ الميلاد أو تاريخ إصدار الفاتورة أو انتهاء الاشتراك، توفّر MySQL النوع DATE بحجم 3 بايت فقط وبالصيغة القياسية YYYY-MM-DD ضمن النطاق الممتد من 1000-01-01 إلى 9999-12-31. أما لحفظ السنة المكونة من أربعة أرقام بين 1901 و2155، فيشغل النوع YEAR بايتاً واحداً فقط.
-- Parse and extract components from standard ISO DATE values
SELECT
CAST('2026-11-07' AS DATE) AS release_date,
YEAR('2026-11-07') AS release_year,
MONTH('2026-11-07') AS release_month,
DAYOFMONTH('2026-11-07') AS release_day;
يمثّل النوع TIME (بحجم أساسي 3 بايت) كلاً من وقت اليوم المعتاد (مثل 14:30:00) وكذلك المدة الزمنية المنقضية أو الفارق بين حدثين. ولأنه مصمم لتمثيل المدد الزمنية أيضاً، يمتد نطاقه الصالح من -838:59:59 إلى 838:59:59، أي ما يتجاوز 34 يوماً كاملة.
-- Calculate elapsed TIME durations and time-of-day offsets
SELECT
CAST('14:45:30' AS TIME) AS shift_start,
TIMEDIFF('18:15:00', '09:30:00') AS shift_duration,
TIME_TO_SEC('02:30:00') AS duration_in_seconds;
يحفظ كل من DATETIME وTIMESTAMP التاريخ والوقت معاً بالصيغة YYYY-MM-DD HH:MM:SS، لكنهما يختلفان جذرياً في الحجم وسلوك المنطقة الزمنية. يشغل DATETIME مساحة 5 بايت ويمتد من عام 1000 حتى 9999 دون أي تحويل للمنطقة الزمنية. أما TIMESTAMP فيشغل 4 بايت ويمتد من بداية عصر يونيكس 1970 حتى 2038-01-19 بتوقيت UTC، ويحوّل الوقت تلقائياً من المنطقة الزمنية للجلسة إلى توقيت UTC عند الحفظ ويعيده لتوقيت الجلسة عند القراءة.
-- Compare UTC timestamp evaluation vs calendar DATETIME
SELECT
UTC_TIMESTAMP() AS current_utc_time,
CAST('2026-11-07 15:00:00' AS DATETIME) AS literal_datetime,
UNIX_TIMESTAMP('2026-11-07 15:00:00') AS epoch_seconds;
تحدث المعاملات المالية عالية التردد وسجلات التتبع الموزعة عدة مرات خلال الثانية الواحدة. تدعم MySQL 8 تحديد دقة أجزاء الثانية عبر المعامل fsp من 0 إلى 6 في الأنواع TIME(fsp) وDATETIME(fsp) وTIMESTAMP(fsp)، مما يتيح توثيق الوقت بدقة تصل إلى الميكروثانية (6 خانات عشرية بعد الثانية).
-- Inspect current timestamp with millisecond and microsecond fsp
SELECT
NOW(3) AS now_milliseconds,
UTC_TIMESTAMP(6) AS utc_microseconds,
MICROSECOND('2026-11-07 12:30:00.987654') AS micro_part;
تحفظ التطبيقات الموجهة لعدة دول أوقات الأحداث بالتوقيت العالمي المنسق UTC مع عرضها بالتوقيت المحلي لكل مستخدم. يمكنك فحص القيم الزمنية وتحويلها بين الفروق الزمنية المختلفة عبر الدالة CONVERT_TZ(dt, from_tz, to_tz) ومتغيرات المنطقة الزمنية للجلسة @@session.time_zone.
-- Convert a UTC datetime across regional timezone offsets
SELECT
@@session.time_zone AS session_tz,
CONVERT_TZ('2026-11-07 09:00:00', '+00:00', '+03:00') AS ksa_dt,
CONVERT_TZ('2026-11-07 09:00:00', '+00:00', '+02:00') AS eg_dt;
| النوع الزمني | الحجم الأساسي (+fsp) | النطاق الزمني الصالح | التحويل لمنطقة UTC | حالة الاستخدام الهندسي المثلى |
|---|---|---|---|---|
DATE | 3 بايت | من 1000-01-01 إلى 9999-12-31 | لا | تواريخ الميلاد، الإجازات، وتواريخ الاستحقاق |
TIME(fsp) | 3 بايت (+0..3 بايت) | من -838:59:59 إلى 838:59:59 | لا | مواعيد الدوام اليومية والمدد الزمنية المنقضية |
DATETIME(fsp) | 5 بايت (+0..3 بايت) | من 1000-01-01 إلى 9999-12-31 23:59:59 | لا (قيمة تقويمية ثابتة) | المواعيد التقويمية والعقود الممتدة لما بعد 2038 |
TIMESTAMP(fsp) | 4 بايت (+0..3 بايت) | من 1970-01-01 إلى 2038-01-19 03:14:07 UTC | نعم (بين الجلسة و UTC) | طوابع تتبع الأحداث العالمية (created_at) |
YEAR | 1 بايت | من 1901 إلى 2155 (و 0000) | لا | سنة الصنع، السنة المالية، أو سنة التخرج |
ملخص الدرس: درسنا في هذا الدرس أنواع البيانات الزمنية في MySQL 8، وقارنّا DATE وTIME وYEAR، وحلّلنا الفرق المعماري الجوهري بين DATETIME الثابت تقويمياً وTIMESTAMP المحوّل تلقائياً لتوقيت UTC مع دقة الميكروثانية fsp.
الخطوة التالية والدرس القادم: في الدرس القادم سنتعمق في نوع بيانات JSON الأصلي في MySQL 8، بما يشمل التخزين الثنائي المهيكل ودوال البناء والاستخراج ومعاملات المسار.
ملخص الدرس
حصاد الدرسمراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي
ماذا تعلّمت في هذا الدرس؟
درسنا في هذا الدرس أنواع البيانات الزمنية في MySQL 8، وقارنّا DATE وTIME وYEAR، وحلّلنا الفرق المعماري الجوهري بين DATETIME الثابت تقويمياً وTIMESTAMP المحوّل تلقائياً لتوقيت UTC مع دقة الميكروثانية fsp. الخطوة التالية: في الدرس القادم سنتعمق في نوع بيانات JSON الأصلي في MySQL 8، بما يشمل التخزين الثنائي المهيكل ودوال البناء والاستخراج ومعاملات المسار.
سجّل الدخول لحفظ تقدمك
تابع إنجاز المواضيع والمصطلحات والمهام، وكمّل من آخر خطوة على أي جهاز.
المصطلحات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 Date Types أنواع التاريخ
- تعلّم أنواع بيانات التاريخ والوقت والطابع الزمني في MySQL بأسلوب MySQL 8 الحديث مع أمثلة استعلامات SQL وتطبيقات تفاعلية.
- للمراجعة
- 02 Calendar Date and YEAR تمثيل التاريخ التقويمي والسنة
- المفهوم الهندسي الأساسي لقسم تمثيل التاريخ التقويمي والسنة في قواعد بيانات MySQL 8 الحديثة.
- للمراجعة
- 03 Time of Day and Durations تخزين الوقت والمدد الزمنية
- الصياغة القياسية وقواعد التنفيذ العملي لقسم تخزين الوقت والمدد الزمنية.
- للمراجعة
- 04 DATETIME Versus TIMESTAMP الفرق بين DATETIME والطابع الزمني
- آلية التخزين وأفضل ممارسات محرك InnoDB الخاصة بقسم الفرق بين DATETIME والطابع الزمني.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
الاختصارات2
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 UTC UTC
- Coordinated Universal Time
- التوقيت العالمي المنسق الذي تعتمده MySQL كمرجع موحد لتخزين قيم TIMESTAMP داخلياً على القرص.
- للمراجعة
- 02 FSP FSP
- Fractional Seconds Precision
- معامل الدقة (من 0 إلى 6) الذي يحدد عدد الخانات العشرية المحفوظة لأجزاء الثانية حتى مستوى الميكروثانية.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
مهامك قبل الاختبار
خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.
-
افتح عميل MySQL 8 المحلي ونفّذ استعلام SQL المشروح في قسم تمثيل التاريخ التقويمي والسنة للتحقق من النتائج.
-
بدّل بين الحالات الثلاث في المحاكي التفاعلي ضمن قسم تخزين الوقت والمدد الزمنية وقارن مخرجات MySQL 8.
تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.
اختبر فهمك.
ووصلها للإتقان.
كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.
أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.
الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.
لمحة عن التحدي4 أسئلة تنتظرك +
أي نوع زمني في MySQL يحوّل القيم تلقائياً من المنطقة الزمنية للجلسة إلى توقيت UTC عند التخزين؟
ميّز بين النوع المرتبط بمنطقة UTC والنوع التقويمي الحرفي.
لماذا يجب تخزين تاريخ انتهاء عقد في عام 2055 باستخدام DATE أو DATETIME بدلاً من TIMESTAMP؟
تذكّر الحد الأعلى لنطاق نوع TIMESTAMP في عام 2038.
ما هي أقصى دقة لأجزاء الثانية (fsp) يدعمها كل من DATETIME(fsp) وTIMESTAMP(fsp) في MySQL 8؟
اختر أقصى عدد للخانات العشرية لأجزاء الثانية (مستوى الميكروثانية).
كم بايتاً من المساحة التخزينية يستهلك الحقل من نوع YEAR في MySQL 8؟
تذكّر حجم التخزين المضغوط لنوع YEAR.