MySQL DATETIME ব্যাখ্যা: ডেটা টাইপ, রেঞ্জ এবং সেরা অনুশীলনসমূহ

目次

১. MySQL DATETIME কী?

MySQL DATETIME হল একটি ডেটা টাইপ যা একক ফিল্ডে তারিখ ও সময় উভয়ই সংরক্ষণ করতে ব্যবহৃত হয়। ডেটাবেসে তারিখ ও সময় মান পরিচালনা করা অনেক অ্যাপ্লিকেশনের জন্য অপরিহার্য, যেমন লগিং এবং রিজার্ভেশন সিস্টেম। DATETIME টাইপ একটি তারিখ ও সময়কে একসাথে সংরক্ষণ করে এবং বিস্তৃত মানের পরিসর সমর্থন করে। এর পরিসর '1000-01-01 00:00:00' থেকে '9999-12-31 23:59:59' পর্যন্ত, এবং এটি ভগ্নাংশ সেকেন্ডও সমর্থন করে।

২. MySQL তারিখ ও সময় ডেটা টাইপের ওভারভিউ

২.১ তারিখ ও সময় পরিচালনার জন্য ডেটা টাইপগুলো

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' পর্যন্ত।

২.২ DATETIME এবং TIMESTAMP এর পার্থক্যগুলো

DATETIME এবং TIMESTAMP সমান, তবে তাদের মধ্যে নিম্নলিখিত পার্থক্য রয়েছে:

  • টাইম জোন : DATETIME একটি স্থির মান সংরক্ষণ করে যা টাইম জোনের উপর নির্ভর করে না। এর বিপরীতে, TIMESTAMP সংরক্ষণ করার সময় UTC তে রূপান্তরিত হয় এবং পুনরুদ্ধার করার সময় সার্ভারের বর্তমান টাইম জোনে রূপান্তরিত হয়। এই কারণে, DATETIME টাইম জোন‑নিরপেক্ষ তারিখ/সময় মানের (যেমন ইভেন্টের সময়) জন্য উপযুক্ত, যেখানে TIMESTAMP সার্ভার টাইম জোনের সাথে যুক্ত ডেটা (যেমন লগ) এর জন্য উপযুক্ত।
  • সংরক্ষণ ফরম্যাট : DATETIME যেমন আছে তেমনই সংরক্ষণ হয়, আর TIMESTAMP একটি UNIX টাইমস্ট্যাম্প হিসেবে সংরক্ষণ হয়। ফলে, TIMESTAMP মানগুলো সময় উপস্থাপন করার সময় সার্ভারের টাইম জোন সেটিংস দ্বারা প্রভাবিত হয়।

৩. MySQL‑এ DATETIME কীভাবে ব্যবহার করবেন

৩.১ DATETIME কলাম তৈরি করা

DATETIME টাইপের একটি কলাম তৈরি করতে নিম্নলিখিত SQL সিনট্যাক্স ব্যবহার করুন:

CREATE TABLE sample_table (
    event_time DATETIME
);

এই উদাহরণে, sample_table নামের টেবিলে event_time নামের একটি DATETIME কলাম তৈরি করা হয়েছে।

৩.২ DATETIME মান সন্নিবেশ করা

MySQL DATETIME মান বিভিন্ন ফরম্যাটে সন্নিবেশ করা যায়। মৌলিক ফরম্যাট হল '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 হিসেবে রূপান্তরিত করা হয়।

৩.৩ DATETIME মান পুনরুদ্ধার করা

DATETIME মান পুনরুদ্ধার করার সময়, MySQL ডিফল্টভাবে 'YYYY-MM-DD HH:MM:SS' ফরম্যাটে প্রদর্শন করে। উদাহরণস্বরূপ:

SELECT event_time FROM sample_table;

এই কুয়েরি স্ট্যান্ডার্ড ফরম্যাটে DATETIME কলামের মানগুলো প্রদর্শন করে।

৪. ভগ্নাংশ সেকেন্ডের সঙ্গে কাজ করা

৪.১ DATETIME নির্ভুলতা

MySQL‑এ DATETIME মানে ভগ্নাংশ সেকেন্ড অন্তর্ভুক্ত করা যায়। আপনি fsp অপশন ব্যবহার করে নির্ভুলতা নির্ধারণ করতে পারেন, যা ০ থেকে ৬ অঙ্কের ভগ্নাংশ সেকেন্ড সংরক্ষণ করতে দেয়। উদাহরণস্বরূপ, ৩ অঙ্কের ভগ্নাংশ সেকেন্ডসহ একটি কলাম তৈরি করতে:

CREATE TABLE precise_times (
    event_time DATETIME(3)
);

এই উদাহরণে, event_time কলামটি সর্বোচ্চ ৩ অঙ্কের ভগ্নাংশ সেকেন্ড সংরক্ষণ করতে পারে।

৪.২ ভগ্নাংশ সেকেন্ডসহ মান সন্নিবেশ করা

ভগ্নাংশ সেকেন্ডসহ একটি 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. সারসংক্ষেপ

এই প্রবন্ধে আমরা MySQL-এর DATETIME টাইপটি বিশদভাবে ব্যাখ্যা করেছি। DATETIME তারিখ ও সময় উভয়ই সংরক্ষণের জন্য একটি অত্যন্ত উপযোগী ডেটা টাইপ, এবং এটি সেই মানগুলি সংরক্ষণের জন্য উপযুক্ত যা সময় অঞ্চলের দ্বারা প্রভাবিত হওয়া উচিত নয়। DATETIME এবং TIMESTAMP-এর পার্থক্য, সময় অঞ্চল কীভাবে কাজ করে, এবং ভগ্নাংশ সেকেন্ড কীভাবে ব্যবহার করতে হয় তা বুঝে আপনি আপনার ডেটাবেসে তারিখ/সময় ডেটা আরও কার্যকরভাবে পরিচালনা করতে পারবেন। এছাড়াও, সাধারণ ভুলগুলো এবং সেগুলি কীভাবে এড়াতে হয় তা জানলে ডেটার সামঞ্জস্যতা ও নির্ভরযোগ্যতা বজায় রাখতে সহায়তা করে।

8. প্রায়শই জিজ্ঞাসিত প্রশ্ন (FAQ)

Q1: DATETIME এবং TIMESTAMP-এর প্রধান পার্থক্য কী?

DATETIME এমন একটি স্থির তারিখ ও সময় সংরক্ষণ করে যা সময় অঞ্চলের উপর নির্ভরশীল নয়। উদাহরণস্বরূপ, এটি রিজার্ভেশন তারিখ বা ইভেন্টের সময় সংরক্ষণের জন্য উপযুক্ত, যা কোনো সময় অঞ্চলে একই রকম থাকা উচিত। অন্যদিকে, TIMESTAMP UTC-তে সংরক্ষিত হয় এবং পুনরুদ্ধার করার সময় সার্ভারের সময় অঞ্চলে রূপান্তরিত হয়। এটি সার্ভারের সময় অঞ্চলের উপর নির্ভরশীল তারিখ/সময় ডেটার জন্য উপযুক্ত, যেমন লগ।

Q2: DATETIME দিয়ে কীভাবে ভগ্নাংশ সেকেন্ড সংরক্ষণ করা যায়?

DATETIME কলাম তৈরি করার সময় fsp মান নির্ধারণ করে আপনি ভগ্নাংশ সেকেন্ডের নির্ভুলতা সেট করতে পারেন। উদাহরণস্বরূপ, DATETIME(3) সর্বোচ্চ ৩ অঙ্কের ভগ্নাংশ সেকেন্ড সংরক্ষণ করে। সন্নিবেশ করার সময় ভগ্নাংশ সেকেন্ডসহ সঠিকভাবে ফরম্যাট করা মান ব্যবহার করুন, এবং তা সঠিকভাবে সংরক্ষিত হবে।

Q3: আমি কি DATETIME না TIMESTAMP ব্যবহার করব?

এটি আপনার ব্যবহারের উপর নির্ভর করে। আপনি যদি একটি স্থির তারিখ ও সময় সংরক্ষণ করতে চান তবে DATETIME ব্যবহার করুন। সার্ভারের সময় অঞ্চলের দ্বারা প্রভাবিত তারিখ/সময় ডেটার জন্য, যেমন রেকর্ড তৈরি বা আপডেটের সময়, TIMESTAMP ব্যবহার করুন। যেহেতু TIMESTAMP স্বয়ংক্রিয় সময় অঞ্চল রূপান্তর করে, তাই আপনার সিস্টেমকে বিভিন্ন সময় অঞ্চলে কাজ করতে হলে এটি উপযুক্ত।