شرح MySQLETIME: دليل شامل لأنواع بيانات التاريخ والوقت

1. ما هو DATETIME في MySQL؟

DATETIME في MySQL هو نوع بيانات صُمم للتعامل مع قيم التاريخ والوقت معًا في آنٍ واحد. إدارة التاريخ والوقت في قاعدة البيانات أمر حيوي لتطبيقات متعددة، مثل أنظمة التسجيل أو أنظمة الحجز. يخزن نوع DATETIME كلًا من التاريخ والوقت في حقل واحد ويمكنه احتواء نطاق واسع من القيم، من '1000-01-01 00:00:00' إلى '9999-12-31 23:59:59'، كما يدعم الثواني الكسرية.

2. نظرة عامة على أنواع بيانات التاريخ والوقت في MySQL

2.1 أنواع البيانات للتعامل مع التواريخ والأوقات

توفر MySQL الأنواع التالية للتعامل مع التواريخ والأوقات:

  • DATE : نوع بيانات للتعامل مع التواريخ (السنة، الشهر، اليوم). النطاق من '1000-01-01' إلى '9999-12-31' .
  • TIME : نوع بيانات للتعامل مع الوقت فقط. النطاق من '-838:59:59' إلى '838:59:59' .
  • DATETIME : نوع بيانات يجمع بين التاريخ والوقت. النطاق من '1000-01-01 00:00:00' إلى '9999-12-31 23:59:59' .
  • TIMESTAMP : نوع بيانات لتخزين طوابع UNIX. النطاق من '1970-01-01 00:00:01' إلى '2038-01-19 03:14:07' .

2.2 الفروقات بين DATETIME و TIMESTAMP

على الرغم من تشابه DATETIME و TIMESTAMP، إلا أن لهما الفروقات الرئيسية التالية:

  • المنطقة الزمنية : يخزن DATETIME قيمة ثابتة لا تتأثر بالمنطقة الزمنية. في المقابل، تُحوَّل قيم TIMESTAMP إلى UTC عند التخزين ثم تُعاد تحويلها إلى المنطقة الزمنية الحالية للخادم عند الاسترجاع. لذلك، يُناسب DATETIME التواريخ والأوقات غير المتأثرة بالمناطق الزمنية (مثل أوقات الفعاليات)، بينما يكون TIMESTAMP أكثر ملاءمة للبيانات المرتبطة بمنطقة زمن الخادم، مثل سجلات السجلات.
  • صيغة التخزين : يُخزن DATETIME بصورته الدقيقة، بينما يُخزن TIMESTAMP كطابع زمني UNIX. وبالتالي، يتأثر TIMESTAMP بإعدادات المنطقة الزمنية للخادم في تمثيله الزمني.

3. كيفية استخدام DATETIME في MySQL

3.1 إنشاء عمود DATETIME

لإنشاء عمود من نوع DATETIME، استخدم بناء الجملة SQL التالي:

CREATE TABLE sample_table (
    event_time DATETIME
);

في هذا المثال، نقوم بإنشاء عمود DATETIME يُدعى event_time في جدول يُسمى sample_table.

3.2 إدراج قيم DATETIME

يمكن إدراج قيم DATETIME في MySQL بصيغ متعددة. الصيغة الأساسية هي 'YYYY-MM-DD HH:MM:SS'. على سبيل المثال:

INSERT INTO sample_table (event_time) VALUES ('2024-09-16 14:30:00');

الصيغ المسموح بها الأخرى تشمل:

  • 'YY-MM-DD HH:MM:SS' : صيغة تُحدِّد السنة برقمين.
  • 'YYYYMMDDHHMMSS' : صيغة تُحدِّد القيم بدون فواصل.

أمثلة:

INSERT INTO sample_table (event_time) VALUES ('24-09-16 14:30:00');
INSERT INTO sample_table (event_time) VALUES (20240916143000);

سيتم حفظ البيانات المُدخلة بهذه الصيغ بشكل صحيح. إذا تم تحديد السنة برقمين، فإن '70-99' سيتحول إلى 1970-1999، و'00-69' سيتحول إلى 2000-2069.

3.3 استرجاع قيم DATETIME

عند استرجاع قيم DATETIME، تعرض MySQL إياها بصيغة 'YYYY-MM-DD HH:MM:SS' الافتراضية. على سبيل المثال:

SELECT event_time FROM sample_table;

ستُظهر هذه الاستعلام قيم عمود DATETIME في جدولك بالصورة القياسية.

4. التعامل مع الثواني الكسرية

4.1 دقة DATETIME

تسمح MySQL بإضافة ثوانٍ كسرية إلى قيم DATETIME. يمكنك تحديد الدقة باستخدام خيار fsp، الذي يتيح تخزين الثواني الكسرية ضمن نطاق من 0 إلى 6. على سبيل المثال، لإنشاء عمود بثلاث منازل عشرية للثواني الكسرية:

CREATE TABLE precise_times (
    event_time DATETIME(3)
);

في هذا المثال، يمكن لعمود event_time تخزين ما يصل إلى ثلاثة أرقام للثواني الكسرية.

4.2 إدراج قيم مع ثوانٍ كسرية

لإدراج قيمة DATETIME تشمل ثوانٍ كسرية، استخدم ما يلي:

INSERT INTO precise_times (event_time) VALUES ('2024-09-16 14:30:00.123');

يخزن هذا الاستعلام القيم بدقة بما في ذلك الثواني الكسرية. يتم تخزين الجزء الكسري المُدرج دون اقتطاع، ويتم الاحتفاظ بدقته عند الاسترجاع.

5. أفضل الممارسات لـ DATETIME

5.1 متى تستخدم DATETIME مقابل TIMESTAMP

  • استخدم DATETIME عندما : تخزين تواريخ وأوقات ثابتة مستقلة عن المناطق الزمنية (مثل، أوقات بدء الفعاليات، تواريخ الحجوزات).
  • استخدم TIMESTAMP عندما : تخزين بيانات التاريخ والوقت المتعلقة بمنطقة الوقت للخادم (مثل، أوقات إنشاء أو تحديث البيانات).

5.2 إدارة المناطق الزمنية

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

6. الأخطاء الشائعة وكيفية تجنبها

6.1 التواريخ الصفرية والقيم غير الصالحة

في MySQL، محاولة إدراج قيمة DATETIME غير صالحة ستؤدي إلى تخزين “تاريخ صفري” '0000-00-00 00:00:00'. بما أن هذا عادةً ليس تاريخاً صالحاً، من المهم التحقق من إدخال البيانات لمنع إدراج قيم غير صالحة. تنفيذ التحقق لضمان أن بيانات الإدخال تتوافق مع النطاقات والصيغ المناسبة يمكن أن يمنع تخزين التواريخ الصفرية.

6.2 سوء استخدام الدقة

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

7. الخاتمة

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

8. الأسئلة الشائعة (FAQ)

Q1: ما هي الاختلافات الرئيسية بين DATETIME و TIMESTAMP؟

يخزن DATETIME تاريخاً ووقتاً ثابتاً مستقل عن المناطق الزمنية. على سبيل المثال، مناسب لتخزين تواريخ الحجوزات أو أوقات الفعاليات التي تبقى متسقة عبر جميع المناطق الزمنية. في المقابل، TIMESTAMP يُخزن بناءً على UTC ويُحول إلى منطقة الوقت للخادم عند الاسترجاع. مناسب لبيانات حساسة للوقت مثل سجلات السجلات التي تعتمد على منطقة الوقت للخادم.

Q2: كيف يمكنني تخزين الثواني الكسرية مع DATETIME؟

عند إنشاء عمود DATETIME، يمكنك تعيين الدقة للثواني الكسرية بتحديد قيمة fsp. على سبيل المثال، تحديد DATETIME(3) يسمح بتخزين الثواني الكسرية حتى ثلاثة أماكن عشرية. عند الإدراج، استخدم قيمة تشمل الثواني الكسرية، وسيتم تخزينها بالصيغة المناسبة.

Q3: هل يجب أن أستخدم DATETIME أم TIMESTAMP؟

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