MySQL বর্তমান সময় গাইড: NOW(), CURRENT_TIMESTAMP, DATE_FORMAT, টাইম জোন সেটিংস এবং সেরা অনুশীলন

目次

১. ভূমিকা

MySQL‑এ বর্তমান সময় পরিচালনা করার প্রয়োজন কখন হয়?

MySQL‑এ বর্তমান সময় পুনরুদ্ধার করা বিভিন্ন পরিস্থিতিতে প্রয়োজনীয়। উদাহরণস্বরূপ, নিম্নলিখিত ব্যবহারিক কেসগুলো সাধারণত দেখা যায়:

  • ডেটা রেজিস্টার করার সময় স্বয়ংক্রিয়ভাবে টাইমস্ট্যাম্প সন্নিবেশ করা
  • উদাহরণস্বরূপ, অর্ডার ডেটা বা লগ ডেটা সংরক্ষণ করার সময় তৈরি তারিখ ও সময় রেকর্ড করা।
  • বর্তমান সময়ের ভিত্তিতে ডেটা ফিল্টার করা
  • উদাহরণস্বরূপ, শেষ ৭ দিনের ডেটা בלבד পুনরুদ্ধার করা বা ভবিষ্যৎ তারিখের রেকর্ড অনুসন্ধান করা।
  • প্রদর্শনের জন্য তারিখ ও সময় ফরম্যাট করা
  • রিপোর্ট তৈরি করার সময় তারিখ ও সময়ের মানগুলোকে আরও পাঠযোগ্যভাবে ফরম্যাট করা।
  • বর্তমান সময় ব্যবহার করে ডেটা মেয়াদ শেষ হওয়া পরিচালনা করা
  • উদাহরণস্বরূপ, কুপনটি এখনও বৈধ কিনা তা বর্তমান সময়ের সঙ্গে তুলনা করে নির্ধারণ করা।

যেমনটি আপনি দেখতে পাচ্ছেন, MySQL‑এ বর্তমান সময় সঠিকভাবে পুনরুদ্ধার ও পরিচালনা করা ডেটাবেস ম্যানেজমেন্টে একটি গুরুত্বপূর্ণ দক্ষতা।

এই প্রবন্ধে আপনি কী শিখবেন

এই প্রবন্ধে নিম্নলিখিত বিষয়গুলো বিশদভাবে ব্যাখ্যা করা হয়েছে:

  • MySQL‑এ বর্তমান সময় কীভাবে পুনরুদ্ধার করবেন (NOW(), CURRENT_TIMESTAMP ইত্যাদি)
  • তারিখ ও সময়ের ফরম্যাট কীভাবে পরিবর্তন করবেন (DATE_FORMAT() ব্যবহার করে)
  • বর্তমান সময় ব্যবহার করে তারিখ ও সময়ের গণনা (INTERVAL ব্যবহার করে)
  • টাইম জোন কীভাবে পরিবর্তন করবেন (SET SESSION time_zone)
  • ডিফল্ট মান হিসেবে বর্তমান সময় ব্যবহার করা (CURRENT_TIMESTAMP)
  • সাধারণ ত্রুটি এবং সেগুলি কীভাবে সমাধান করবেন (FAQ)

MySQL‑এ “বর্তমান সময়” পরিচালনার মৌলিক থেকে উন্নত ব্যবহার পর্যন্ত, এই গাইডটি ব্যবহারিক SQL উদাহরণ প্রদান করে। শেষ পর্যন্ত অবশ্যই পড়ে দেখুন।

২. MySQL‑এ বর্তমান সময় কীভাবে পুনরুদ্ধার করবেন

MySQL‑এ বর্তমান সময় পুনরুদ্ধার করার ফাংশনগুলোর তালিকা

MySQL‑এ বর্তমান সময় পুনরুদ্ধার করার জন্য বেশ কয়েকটি ফাংশন রয়েছে। পার্থক্যগুলো বুঝে সঠিকভাবে ব্যবহার করুন।

FunctionReturnsExample
NOW()Current date and time (date + time)SELECT NOW();2025-02-11 16:00:00
CURRENT_TIMESTAMPSame as NOW() (SQL standard)SELECT CURRENT_TIMESTAMP;
CURDATE()Current date onlySELECT CURDATE();2025-02-11
CURTIME()Current time onlySELECT CURTIME();16:00:00

NOW() ফাংশন

NOW() হল MySQL‑এ সবচেয়ে বেশি ব্যবহৃত ফাংশন, যা বর্তমান সময় পুনরুদ্ধার করে।
এটি তারিখ এবং সময় উভয়ই ফেরত দেয়।

SELECT NOW();

আউটপুট উদাহরণ:

2025-02-11 16:00:00
  • NOW() বর্তমান সিস্টেম সময় ফেরত দেয়।
  • এটি টাইম জোনের দ্বারা প্রভাবিত হয়, তাই আপনার পরিবেশের উপর নির্ভর করে প্রদর্শিত সময় ভিন্ন হতে পারে (“টাইম জোন সেটিংস” অংশে বিস্তারিত ব্যাখ্যা করা হয়েছে)।

CURRENT_TIMESTAMP কীভাবে ব্যবহার করবেন

CURRENT_TIMESTAMP প্রায় NOW() এর মতোই কাজ করে। এটি SQL স্ট্যান্ডার্ডের সাথে সামঞ্জস্যপূর্ণ এবং অন্যান্য ডেটাবেসেও ব্যবহার করা যায়।

SELECT CURRENT_TIMESTAMP;

আউটপুট উদাহরণ:

2025-02-11 16:00:00

CURDATE() দিয়ে শুধুমাত্র তারিখ পাওয়া

CURDATE() ব্যবহার করা হয় যখন আপনি শুধুমাত্র বর্তমান তারিখ (বছর, মাস, দিন) পুনরুদ্ধার করতে চান।

SELECT CURDATE();

আউটপুট উদাহরণ:

2025-02-11

CURTIME() দিয়ে শুধুমাত্র সময় পাওয়া

যদি আপনি শুধুমাত্র বর্তমান সময় (ঘণ্টা, মিনিট, সেকেন্ড) পুনরুদ্ধার করতে চান, তবে CURTIME() ব্যবহার করুন।

SELECT CURTIME();

আউটপুট উদাহরণ:

16:00:00

কোন ফাংশনটি ব্যবহার করবেন?

PurposeRecommended Function
Retrieve both date and timeNOW() or CURRENT_TIMESTAMP
Retrieve date onlyCURDATE()
Retrieve time onlyCURTIME()

৩. MySQL‑এ বর্তমান সময় কীভাবে ফরম্যাট করবেন

DATE_FORMAT() দিয়ে কাস্টম ফরম্যাটিং

DATE_FORMAT() এর মৌলিক সিনট্যাক্স

MySQL‑এ আপনি DATE_FORMAT() ফাংশন ব্যবহার করে তারিখ ও সময়ের ফরম্যাট স্বাধীনভাবে পরিবর্তন করতে পারেন।

SELECT DATE_FORMAT(datetime_value, 'format_specifiers');

উদাহরণ: NOW() কে YYYY/MM/DD HH:MM ফরম্যাটে রূপান্তর করা

SELECT DATE_FORMAT(NOW(), '%Y/%m/%d %H:%i');

আউটপুট:

2025/02/11 16:45

সাধারণ ফরম্যাট স্পেসিফায়ারগুলোর তালিকা

SpecifierMeaningExample (2025-02-11 16:45:30)
%Y4-digit year2025
%m2-digit month (01-12)02
%d2-digit day (01-31)11
%HHour (00-23, 24-hour format)16
%iMinutes (00-59)45
%sSeconds (00-59)30

TIME() দিয়ে শুধুমাত্র সময় অংশ বের করা

যদি আপনি NOW() দ্বারা ফেরত দেওয়া datetime থেকে শুধুমাত্র সময় অংশ বের করতে চান, তবে TIME() ফাংশন ব্যবহার করুন।

SELECT TIME(NOW());

আউটপুট:

16:45:30

YEAR(), MONTH(), এবং DAY() দিয়ে অংশগুলো বের করা

নির্দিষ্ট অংশগুলো শুধুমাত্র বের করতে, নিম্নলিখিত ফাংশনগুলো ব্যবহার করুন।

FunctionReturnsSQLOutput Example (2025-02-11 16:45:30)
YEAR()YearSELECT YEAR(NOW());2025
MONTH()MonthSELECT MONTH(NOW());2
DAY()DaySELECT DAY(NOW());11

ফরম্যাটিংয়ের ব্যবহারিক উদাহরণ

নিম্নলিখিত SQL বাস্তবে বিভিন্ন ফরম্যাট চেষ্টা করার জন্য উপযোগী।

SELECT 
    NOW() AS 'Original datetime',
    DATE_FORMAT(NOW(), '%Y/%m/%d') AS 'YYYY/MM/DD format',
    DATE_FORMAT(NOW(), '%H:%i:%s') AS 'HH:MM:SS',
    TIME(NOW()) AS 'Time only',
    YEAR(NOW()) AS 'Year',
    MONTH(NOW()) AS 'Month',
    DAY(NOW()) AS 'Day';

4. MySQL-এ বর্তমান সময় ব্যবহার করে তারিখ/সময় গণনা

INTERVAL দিয়ে যোগ/বিয়োগ

মৌলিক সিনট্যাক্স

SELECT current_datetime + INTERVAL number unit;
SELECT current_datetime - INTERVAL number unit;

NOW() ভিত্তিক সময় যোগ করা

উদাহরণস্বরূপ, এক সপ্তাহ পরে তারিখ‑সময় পেতে:

SELECT NOW() + INTERVAL 7 DAY;

আউটপুট উদাহরণ:

2025-02-18 16:30:00
UnitMeaningExample
SECONDSecondsNOW() + INTERVAL 10 SECOND
MINUTEMinutesNOW() + INTERVAL 5 MINUTE
HOURHoursNOW() + INTERVAL 2 HOUR
DAYDaysNOW() + INTERVAL 10 DAY
MONTHMonthsNOW() + INTERVAL 3 MONTH

DATEDIFF() দিয়ে দুই তারিখের পার্থক্য গণনা

SELECT DATEDIFF(NOW(), '2025-01-01');

আউটপুট উদাহরণ:

30

BETWEEN দিয়ে তারিখ সীমা ফিল্টার করা

SELECT * FROM orders
WHERE created_at BETWEEN '2025-02-01 00:00:00' AND '2025-02-28 23:59:59';

5. MySQL সময় অঞ্চল সেটিংস

বর্তমান সময় অঞ্চল পরীক্ষা করুন

SHOW VARIABLES LIKE '%time_zone%';

আউটপুট উদাহরণ:

+------------------+----------------+
| Variable_name    | Value          |
+------------------+----------------+
| system_time_zone | UTC            |
| time_zone        | SYSTEM         |
+------------------+----------------+

সেশনের জন্য সময় অঞ্চল পরিবর্তন করুন

SET SESSION time_zone = 'Asia/Tokyo';

সার্ভারের ডিফল্ট সময় অঞ্চল পরিবর্তন করুন

কনফিগারেশন ফাইল (my.cnf) এ নিম্নলিখিতটি যোগ করুন:

[mysqld]
default_time_zone = 'Asia/Tokyo'

UTC_TIMESTAMP দিয়ে UTC সময় পান

SELECT UTC_TIMESTAMP();

CONVERT_TZ() দিয়ে স্থানীয় সময়ে রূপান্তর করুন

SELECT CONVERT_TZ(UTC_TIMESTAMP(), 'UTC', 'Asia/Tokyo');

6. MySQL-এ বর্তমান সময়কে ডিফল্ট মান হিসেবে সেট করার পদ্ধতি

CURRENT_TIMESTAMP কে ডিফল্ট মান হিসেবে সেট করুন

CREATE TABLE logs (
    id INT AUTO_INCREMENT PRIMARY KEY,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

ON UPDATE CURRENT_TIMESTAMP দিয়ে স্বয়ংক্রিয় আপডেট

CREATE TABLE logs (
    id INT AUTO_INCREMENT PRIMARY KEY,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

DATETIME এবং TIMESTAMP এর পার্থক্য

TypeAffected by Time ZoneCan Set CURRENT_TIMESTAMP as Default
TIMESTAMPYesYes
DATETIMENoNo

কেন আপনি NOW() কে ডিফল্ট মান হিসেবে ব্যবহার করতে পারবেন না এবং সমাধান

ERROR 1067 (42000): Invalid default value for 'created_at'

সমাধান:

CREATE TRIGGER set_created_at
BEFORE INSERT ON logs
FOR EACH ROW
SET NEW.created_at = NOW();

7. সাধারণ MySQL ত্রুটি এবং সমাধান (FAQ)

NOW() কে ডিফল্ট মান হিসেবে ব্যবহার করা যায় না

ত্রুটি উদাহরণ

CREATE TABLE logs (
    created_at DATETIME DEFAULT NOW()
);
ERROR 1067 (42000): Invalid default value for 'created_at'

সমাধান

CREATE TABLE logs (
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CURRENT_TIMESTAMP সময় ভুল

SHOW VARIABLES LIKE 'time_zone';

সমাধান

SET SESSION time_zone = 'Asia/Tokyo';

NOW() ফলাফল এক ঘন্টা বিচ্যুত

SHOW VARIABLES LIKE 'system_time_zone';

সমাধান

SET GLOBAL time_zone = 'Asia/Tokyo';

BETWEEN রেঞ্জ ফিল্টারিং প্রত্যাশিতভাবে কাজ করে না

SELECT * FROM orders
WHERE created_at BETWEEN '2025-02-01' AND '2025-02-28';

সমাধান

SELECT * FROM orders
WHERE created_at BETWEEN '2025-02-01 00:00:00' AND '2025-02-28 23:59:59';

8. MySQL-এ বর্তমান সময় পরিচালনার সেরা পদ্ধতি

কখন NOW() বনাম CURRENT_TIMESTAMP ব্যবহার করবেন

Use CaseRecommended
Retrieve the current time in a SELECT statementNOW()
Automatically set the current time during INSERTCURRENT_TIMESTAMP
Set as the default value of a TIMESTAMP columnCURRENT_TIMESTAMP

কখন TIMESTAMP বনাম DATETIME ব্যবহার করবেন

Data TypeAffected by Time ZoneStorage Size
TIMESTAMPYes4 bytes
DATETIMENo8 bytes

UTC-তে সংরক্ষণ করুন এবং স্থানীয় সময়ে রূপান্তর করুন

SELECT CONVERT_TZ(event_time, 'UTC', 'Asia/Tokyo');

BETWEEN এর পরিবর্তে >= এবং < ব্যবহার করুন

SELECT * FROM orders
WHERE created_at >= '2025-02-01 00:00:00' 
AND created_at < '2025-03-01 00:00:00';

INTERVAL এর ব্যবহার মানক করুন

SELECT NOW() + INTERVAL 1 DAY;

পুরোনো ডেটা সঠিকভাবে পরিষ্কার করুন

DELETE FROM logs WHERE created_at < NOW() - INTERVAL 1 YEAR LIMIT 1000;