- 1 ১. MySQL TIMESTAMP কী?
- 2 ২. TIMESTAMP-এর মৌলিক ব্যবহার
- 3 ৩. TIMESTAMP এবং সময় অঞ্চলের সাথে কাজ করা
- 4 ৪. ২০৩৮ সালের সমস্যা এবং এর প্রভাব
- 5 5. TIMESTAMP টাইপের ব্যবহারিক উদাহরণসমূহ
- 6 6. TIMESTAMP টাইপ ব্যবহার করার সময় গুরুত্বপূর্ণ নোটসমূহ
- 7 ৭. সংক্ষিপ্তসার এবং সুপারিশ
- 8 ৮. প্রায়শই জিজ্ঞাসিত প্রশ্ন (FAQ)
- 8.1 কীভাবে TIMESTAMP এবং DATETIME এর মধ্যে নির্বাচন করব?
- 8.2 কি সত্যি যে TIMESTAMP ২০৩৮ সালের পরে ব্যবহার করা যায় না?
- 8.3 কীভাবে একটি TIMESTAMP কলামে NULL মান অনুমোদন করা যায়?
- 8.4 যদি আমি সময় অঞ্চল সেটিং পরিবর্তন করি, তবে কি এটি বিদ্যমান TIMESTAMP ডেটাকে প্রভাবিত করবে?
- 8.5 যদি আমি CURRENT_TIMESTAMP ব্যবহার করি, তবুও কি নির্দিষ্ট datetime ইনসার্ট করতে পারি?
১. MySQL TIMESTAMP কী?
MySQL-এ TIMESTAMP ডেটা টাইপটি UTC (সমন্বিত সার্বজনীন সময়) এ একটি নির্দিষ্ট সময়সীমা সংরক্ষণ করার জন্য ডিজাইন করা হয়েছে এবং ডেটা সংরক্ষণ এবং পুনরুদ্ধারের সময় সময় অঞ্চল রূপান্তর স্বয়ংক্রিয়ভাবে পরিচালনা করে। এই ডেটা টাইপটি ১ জানুয়ারি, ১৯৭০ থেকে ১৯ জানুয়ারি, ২০৩৮ পর্যন্ত তারিখ এবং সময় পরিচালনা করতে পারে। ডেটাবেসে ডেটা সংরক্ষণের সময়, TIMESTAMP বর্তমান সময় অঞ্চল ব্যবহার করে, এবং ডেটা পুনরুদ্ধারের সময়, এটি সিস্টেম সময় অঞ্চলের উপর ভিত্তি করে স্বয়ংক্রিয়ভাবে রূপান্তরিত হয়।
TIMESTAMP এবং DATETIME-এর মধ্যে পার্থক্য
DATETIME ডেটা টাইপটি প্রায়শই TIMESTAMP-এর সাথে তুলনা করা হয়। DATETIME তারিখ এবং সময় মানগুলি “যেমন আছে” সংরক্ষণ করে, তাই সংরক্ষিত ডেটা সময় অঞ্চল দ্বারা প্রভাবিত হয় না। বিপরীতে, TIMESTAMP সংরক্ষণের সময় UTC-তে রূপান্তরিত হয় এবং পুনরুদ্ধারের সময় সিস্টেম সময় অঞ্চলে রূপান্তরিত হয়, যা বিভিন্ন পরিবেশে সময় অফসেট প্রতিরোধ করতে সাহায্য করে।
উদাহরণস্বরূপ, TIMESTAMP সিস্টেম মাইগ্রেশনের সময় বা একাধিক সময় অঞ্চলে ডেটাবেসের সাথে কাজ করার সময় বিশেষভাবে উপকারী। DATETIME একটি বিস্তৃত পরিসর সমর্থন করে—১০০০ থেকে ৯৯৯৯ সাল পর্যন্ত—তাই এটি প্রায়শই ২০৩৮ সালের সমস্যা এড়াতে ব্যবহৃত হয়।
TIMESTAMP-এর উদাহরণ ব্যবহার
আপনি নিম্নরূপ TIMESTAMP ব্যবহার করে একটি টেবিল তৈরি করতে পারেন।
CREATE TABLE events (
id INT AUTO_INCREMENT PRIMARY KEY,
event_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
এই উদাহরণে, event_time কলামটি একটি রেকর্ড ইনসার্ট করার সময় বর্তমান সময় স্বয়ংক্রিয়ভাবে সংরক্ষণ করে, এবং রেকর্ড আপডেট করার প্রতিটি সময় সেই মানটি ওভাররাইট করে।
২. TIMESTAMP-এর মৌলিক ব্যবহার
MySQL-এ TIMESTAMP ব্যবহার করার সময়, মান ইনসার্ট এবং পুনরুদ্ধারের মৌলিক উপায়গুলি বোঝা গুরুত্বপূর্ণ। নিচে TIMESTAMP ডেটার সাথে কাজ করার কয়েকটি সাধারণ পদ্ধতি দেওয়া হয়েছে।
একটি তারিখ এবং সময় ইনসার্ট করুন
TIMESTAMP কলামে ডেটা ইনসার্ট করার সময়, আপনি সাধারণত তারিখ এবং সময়টি একটি স্ট্রিং ফরম্যাটে নির্দিষ্ট করেন। তারিখটি “YYYY-MM-DD” হিসেবে প্রতিনিধিত্ব করা হয় এবং সময়টি “hh:mm:ss” হিসেবে।
INSERT INTO events (event_time) VALUES ('2023-10-01 12:30:00');
এই SQL বিবৃতিটি ২০২৩ সালের ১ অক্টোবর ১২:৩০:০০ event_time কলামে ইনসার্ট করে।
বর্তমান সময় ইনসার্ট করুন
MySQL-এর NOW() ফাঙ্কশন ব্যবহার করে, আপনি সহজেই বর্তমান তারিখ এবং সময় পেতে পারেন। এই ফাঙ্কশনটি সিস্টেম সময় অঞ্চলের উপর ভিত্তি করে বর্তমান তারিখ এবং সময় ফেরত দেয়, এবং আপনি এটি সরাসরি একটি TIMESTAMP কলামে ইনসার্ট করতে পারেন।
INSERT INTO events (event_time) VALUES (NOW());
এই উদাহরণে, SQL এক্সিকিউট করার মুহূর্তের বর্তমান সময়টি স্বয়ংক্রিয়ভাবে ইনসার্ট করা হয়।
অটো-আপডেট ফিচার ব্যবহার করুন
যদি আপনি একটি TIMESTAMP কলামের জন্য ON UPDATE CURRENT_TIMESTAMP নির্দিষ্ট করেন, তাহলে রেকর্ড আপডেট করার প্রতিটি সময় আপডেট সময়টি স্বয়ংক্রিয়ভাবে রেকর্ড করা হয়।
CREATE TABLE orders (
id INT AUTO_INCREMENT PRIMARY KEY,
order_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
এই টেবিলে, order_time রেকর্ড তৈরি করার সময় বর্তমান সময়ে সেট করা হয়, এবং রেকর্ড আপডেট করার প্রতিটি সময় এটি আপডেট করা হয়।

৩. TIMESTAMP এবং সময় অঞ্চলের সাথে কাজ করা
TIMESTAMP-এর সবচেয়ে বড় বৈশিষ্ট্যগুলির মধ্যে একটি হলো সময় অঞ্চল পরিচালনা। সংরক্ষিত ডেটা সর্বদা UTC-তে রূপান্তরিত হয়, এবং আপনি এটি ডেটাবেস থেকে পুনরুদ্ধার করার সময়, এটি সিস্টেম সময় অঞ্চলের সাথে মিলিয়ে আবার রূপান্তরিত হয়।
সময় অঞ্চল সেটিং চেক করার উপায়
MySQL-এ, আপনি সার্ভার বা সেশন প্রতি সময় অঞ্চল সেট করতে পারেন। আপনি SHOW VARIABLES কমান্ড ব্যবহার করে সময় অঞ্চল সেটিং চেক করতে পারেন।
SHOW VARIABLES LIKE 'time_zone';
এই কমান্ডটি ডেটাবেসের জন্য বর্তমানে কনফিগার করা সময় অঞ্চল ফেরত দেয়। সময় অঞ্চল পরিবর্তন করতে, নিম্নলিখিত বিবৃতি ব্যবহার করুন।
SET time_zone = '+09:00';
TIMESTAMP এবং DATETIME-এর মধ্যে সময় অঞ্চল পার্থক্য
DATETIME টাইপটি সময় অঞ্চল বিবেচনা না করে তারিখ এবং সময় সংরক্ষণ করে, যেখানে TIMESTAMP টাইপটি সংরক্ষণের সময় UTC-তে রূপান্তরিত হয়। তাই, যেখানে একাধিক সময় অঞ্চল একসাথে বিদ্যমান থাকে সেখানকার পরিবেশে, TIMESTAMP প্রায়শই ভালো পছন্দ।
৪. ২০৩৮ সালের সমস্যা এবং এর প্রভাব
2038 সালের সমস্যা 32-বিট সিস্টেমে TIMESTAMP টাইপের সীমাবদ্ধতার কারণে ঘটে। MySQL‑এর TIMESTAMP টাইপটি ১ জানুয়ারি ১৯৭০, 00:00:00 UTC থেকে অতিবাহিত সেকেন্ডের সংখ্যার উপর ভিত্তি করে। যখন এটি ১৯ জানুয়ারি ২০৩৮, 03:14:07 UTC‑কে অতিক্রম করে, তখন মানটি ওভারফ্লো হয়।
2038 সালের সমস্যাটি কীভাবে এড়ানো যায়
এই সমস্যাটি এড়াতে ৬৪-বিট সিস্টেম ব্যবহার করা অথবা বিস্তৃত‑পরিসরের DATETIME টাইপ ব্যবহার করার পরামর্শ দেওয়া হয়। DATETIME ১০০০ থেকে ৯৯৯৯ সাল পর্যন্ত তারিখ ও সময় পরিচালনা করতে পারে, তাই এটি ২০৩৮ সালের পরেও নিরাপদে ব্যবহার করা যায়।
আপনি আপনার সিস্টেম আপগ্রেড করেও এই সমস্যাটি এড়াতে পারেন। ৬৪-বিট সিস্টেমে 2038 সালের সীমাবদ্ধতা নেই, তাই আপনার ডেটাবেস ও অ্যাপ্লিকেশন আপগ্রেড করার কথা বিবেচনা করা গুরুত্বপূর্ণ।
5. TIMESTAMP টাইপের ব্যবহারিক উদাহরণসমূহ
MySQL‑এর TIMESTAMP টাইপ শুধুমাত্র মৌলিক তারিখ ও সময় মান সংরক্ষণের জন্য নয়, স্বয়ংক্রিয়ভাবে বর্তমান সময় সন্নিবেশ বা আপডেট করার মতো বিভিন্ন ব্যবহারিক প্যাটার্নও সমর্থন করে। নিচে কিছু সাধারণ উন্নত ব্যবহারিক উদাহরণ দেওয়া হল।
বর্তমান সময় স্বয়ংক্রিয়ভাবে সন্নিবেশ করা
একটি TIMESTAMP কলাম সংজ্ঞায়িত করার সময়, আপনি ডিফল্ট মান হিসেবে CURRENT_TIMESTAMP সেট করতে পারেন, যাতে নতুন রেকর্ড তৈরি হলে বর্তমান তারিখ ও সময় স্বয়ংক্রিয়ভাবে সন্নিবেশ হয়। উদাহরণস্বরূপ, অর্ডার ঘটার সময় স্বয়ংক্রিয়ভাবে রেকর্ড করা একটি টেবিল তৈরি করতে নিম্নলিখিতভাবে করতে পারেন।
CREATE TABLE orders (
id INT AUTO_INCREMENT PRIMARY KEY,
order_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
আপডেট সময় স্বয়ংক্রিয়ভাবে রেকর্ড করা
ON UPDATE CURRENT_TIMESTAMP নির্দিষ্ট করলে, রেকর্ড আপডেট হওয়ার প্রতিবার আপডেট সময় স্বয়ংক্রিয়ভাবে রেকর্ড হয়। এতে আপডেট ইতিহাস স্বয়ংক্রিয়ভাবে পরিচালনা করা সহজ হয়।
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50),
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
একাধিক TIMESTAMP কলাম ব্যবহার করা
MySQL‑এ আপনি একটি টেবিলে একাধিক TIMESTAMP কলাম রাখতে পারেন, তবে ডিফল্টভাবে শুধুমাত্র একটি কলামই CURRENT_TIMESTAMP‑কে ডিফল্ট মান হিসেবে রাখতে পারে। যদি আপনি একাধিক টাইমস্ট্যাম্প স্বয়ংক্রিয়ভাবে পরিচালনা করতে চান, তবে অন্য কলামগুলোর জন্য স্পষ্টভাবে মান নির্ধারণ করুন অথবা DATETIME টাইপ ব্যবহার করুন।
CREATE TABLE posts (
id INT AUTO_INCREMENT PRIMARY KEY,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
6. TIMESTAMP টাইপ ব্যবহার করার সময় গুরুত্বপূর্ণ নোটসমূহ
TIMESTAMP টাইপ ব্যবহার করার সময় কয়েকটি গুরুত্বপূর্ণ সতর্কতা রয়েছে। এগুলো বোঝা অনাকাঙ্ক্ষিত অসঙ্গতি ও ত্রুটি প্রতিরোধে সহায়তা করে।
NULL সীমাবদ্ধতা এবং ডিফল্ট মানসমূহ
ডিফল্টভাবে TIMESTAMP কলামে NOT NULL সীমাবদ্ধতা প্রয়োগ করা হয়। অন্য কথায়, যদি আপনি NULL মান অনুমোদন করতে চান, তবে স্পষ্টভাবে DEFAULT NULL উল্লেখ করতে হবে।
CREATE TABLE logs (
id INT AUTO_INCREMENT PRIMARY KEY,
log_time TIMESTAMP DEFAULT NULL
);
আপনি ডিফল্টভাবে অবৈধ datetime মান 0000-00-00 00:00:00 সেট করতে DEFAULT 0 ব্যবহারও করতে পারেন। তবে এটি সুপারিশ করা হয় না। MySQL‑এর কঠোর SQL মোডে, এই অবৈধ datetime ত্রুটি সৃষ্টি করতে পারে।
0000-00-00 00:00:00 সমস্যাটি
কিছু MySQL সংস্করণে 0000-00-00 00:00:00 অবৈধ datetime মান হিসেবে সমর্থন করা হয়, তবে বাস্তব সিস্টেমে এটি অপারেশনাল সমস্যার কারণ হতে পারে। বিশেষত, ডেটা অখণ্ডতাকে অগ্রাধিকার দেয়া সিস্টেমগুলোকে এমন অবৈধ মান ব্যবহার না করা উচিত। পরিবর্তে NULL অথবা উপযুক্ত ডিফল্ট মান ব্যবহার করার পরামর্শ দেওয়া হয়।
CREATE TABLE sessions (
id INT AUTO_INCREMENT PRIMARY KEY,
start_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
end_time TIMESTAMP NULL
);
সিস্টেম টাইম জোনের প্রভাব
TIMESTAMP টাইপটি UTC‑তে রূপান্তরিত হয়ে সংরক্ষিত হয়, তাই বিভিন্ন টাইম জোনের মধ্যে ডেটাবেস মাইগ্রেট করার সময় সতর্কতা প্রয়োজন। যদি সার্ভারের টাইম জোন সেটিং পরিবর্তন হয়, তবে পুনরুদ্ধার করা সময়গুলো অনিচ্ছাকৃত মানে রূপান্তরিত হতে পারে। তাই টাইম জোন সঠিকভাবে পরিচালনা করা গুরুত্বপূর্ণ।
SET time_zone = 'Asia/Tokyo';
This command sets the database time zone to Tokyo and ensures accurate management of conversions from UTC.
এই কমান্ডটি ডাটাবেসের সময় অঞ্চলকে টোকিওতে সেট করে এবং UTC থেকে রূপান্তরের সঠিক ব্যবস্থাপনা নিশ্চিত করে।

৭. সংক্ষিপ্তসার এবং সুপারিশ
TIMESTAMP টাইপটি MySQL-এ তারিখ ও সময় দক্ষতার সাথে পরিচালনার জন্য একটি শক্তিশালী টুল। বিশেষ করে, সময় অঞ্চলের সঙ্গে স্বয়ংক্রিয় রূপান্তর এবং তৈরি/আপডেটের সময় স্বয়ংক্রিয় সময় রেকর্ডিং খুবই সুবিধাজনক। তবে, ২০৩৮ সালের সমস্যার মতো সীমাবদ্ধতা এবং NULL মান কীভাবে হ্যান্ডেল হয় তা বোঝা গুরুত্বপূর্ণ।
কখন TIMESTAMP ব্যবহার করবেন
- যখন আপনাকে স্বয়ংক্রিয় আপডেট আচরণ দরকার ,
TIMESTAMPআদর্শ—বিশেষত যদি আপনি প্রতিবার রেকর্ড আপডেট হলে স্বয়ংক্রিয়ভাবে একটি টাইমস্ট্যাম্প রেকর্ড করতে চান। - যে সিস্টেমগুলোকে সময় অঞ্চল বিবেচনা করতে হয় ,
TIMESTAMP-এর UTC-ভিত্তিক রূপান্তর আচরণ সহায়ক। - অন্যদিকে, যদি আপনাকে ভবিষ্যত-প্রমাণ রেঞ্জ দরকার হয় বা সমর্থিত রেঞ্জের বাইরে (২০৩৮ সালের পরে) তারিখগুলি হ্যান্ডেল করতে হয়, তবে
DATETIMEব্যবহার করার কথা বিবেচনা করুন।
অবশেষে, আপনার সিস্টেমের প্রয়োজনীয়তার ভিত্তিতে TIMESTAMP এবং DATETIME এর মধ্যে নির্বাচন করুন যাতে ডেটার অখণ্ডতা এবং রক্ষণাবেক্ষণযোগ্যতা নিশ্চিত হয়।
৮. প্রায়শই জিজ্ঞাসিত প্রশ্ন (FAQ)
MySQL TIMESTAMP সম্পর্কিত প্রশ্ন ও সমস্যাগুলি ডেভেলপারদের মধ্যে সাধারণ, তাই এই বিভাগে প্রায়শই জিজ্ঞাসিত প্রশ্নগুলোর সারসংক্ষেপ দেওয়া হয়েছে। এই FAQ-গুলো TIMESTAMP সঠিকভাবে হ্যান্ডেল করার জন্য সহায়ক টিপস এবং সমাধান প্রদান করে।
কীভাবে TIMESTAMP এবং DATETIME এর মধ্যে নির্বাচন করব?
TIMESTAMP UTC ব্যবহার করে সময় অঞ্চলের ভিত্তিতে মানগুলো স্বয়ংক্রিয়ভাবে রূপান্তর করে, তাই এটি বহু সময় অঞ্চল বিবেচনা করতে হবে এমন অ্যাপ্লিকেশন ও সিস্টেমের জন্য উপযুক্ত। এটি রেকর্ড তৈরি বা আপডেটের সময় তারিখ/সময় মানগুলো স্বয়ংক্রিয়ভাবে সংরক্ষণ করার সমর্থনও দেয়। অন্যদিকে, DATETIME মানগুলো “যেমন আছে” তেমনই সংরক্ষণ করে, তাই সময় অঞ্চল রূপান্তর ছাড়া সঙ্গতিপূর্ণ datetime ব্যবস্থাপনা প্রয়োজন হলে এটি ভাল।
কি সত্যি যে TIMESTAMP ২০৩৮ সালের পরে ব্যবহার করা যায় না?
হ্যাঁ। ২০৩৮ সালের সমস্যা ৩২-বিট TIMESTAMP টাইপে প্রযোজ্য। এটি ১ জানুয়ারি ১৯৭০ থেকে সেকেন্ডের সংখ্যা ভিত্তিক হওয়ায় ১৯ জানুয়ারি ২০৩৮ এর পরে datetime উপস্থাপন করতে পারে না। এ থেকে বাঁচতে ৬৪-বিট সিস্টেমে মাইগ্রেট করা বা DATETIME টাইপ ব্যবহার করার পরামর্শ দেওয়া হয়।
কীভাবে একটি TIMESTAMP কলামে NULL মান অনুমোদন করা যায়?
TIMESTAMP কলামে NULL মান অনুমোদন করতে হলে, আপনাকে স্পষ্টভাবে DEFAULT NULL নির্দিষ্ট করতে হবে, যেমন নিচে দেখানো হয়েছে।
CREATE TABLE logs (
id INT AUTO_INCREMENT PRIMARY KEY,
log_time TIMESTAMP DEFAULT NULL
);
এই সেটিংয়ের মাধ্যমে, যদি আপনি datetime নির্দিষ্ট না করে একটি রেকর্ড ইনসার্ট করেন, তবে একটি NULL মান সংরক্ষিত হবে।
যদি আমি সময় অঞ্চল সেটিং পরিবর্তন করি, তবে কি এটি বিদ্যমান TIMESTAMP ডেটাকে প্রভাবিত করবে?
TIMESTAMP মানগুলো সংরক্ষণ করার সময় UTC-তে রূপান্তরিত হয়, তাই সময় অঞ্চল সেটিং পরিবর্তন করলে ডেটা পুনরুদ্ধার করার সময় কীভাবে প্রদর্শিত হবে তা প্রভাবিত করে। মূল ডেটা এখনও UTC-তে সংরক্ষিত থাকে, তবে নতুন সময় অঞ্চলের ভিত্তিতে রূপান্তরিত হবে, যা পুনরুদ্ধার করা সময় মানগুলো পরিবর্তন করে। ডেটা সামঞ্জস্য রাখতে, সিস্টেম জুড়ে সময় অঞ্চল সেটিংগুলো মানক করা গুরুত্বপূর্ণ।
যদি আমি CURRENT_TIMESTAMP ব্যবহার করি, তবুও কি নির্দিষ্ট datetime ইনসার্ট করতে পারি?
CURRENT_TIMESTAMP রেকর্ড ইনসার্ট করার সময় স্বয়ংক্রিয়ভাবে বর্তমান সময় ইনসার্ট করে, তবে আপনি NOW() অথবা একটি স্ট্রিং লিটারাল ব্যবহার করে স্পষ্টভাবে নির্দিষ্ট datetime ইনসার্ট করতে পারেন।
INSERT INTO events (event_time) VALUES ('2023-10-01 12:30:00');
এইভাবে, CURRENT_TIMESTAMP ব্যবহার করলেও আপনি ম্যানুয়ালি datetime ইনসার্ট করতে পারেন।


