1. MySQL TIMESTAMP යනු කුමක්ද?
MySQL හි TIMESTAMP දත්ත වර්ගය UTC (කාල සම්බන්ධීකරණ ලෝක කාලය) හි නිශ්චිත කාලයක් සංරක්ෂණය කිරීම සඳහා නිර්මාණය කර ඇති අතර, දත්ත සුරැකීම සහ ලබාගැනීමේදී කාල කලාප පරිවර්තනය ස්වයංක්රීයව කළමනාකරණය කරයි. මෙම දත්ත වර්ගය ජනවාරි 1, 1970 සිට ජනවාරි 19, 2038 දක්වා දින සහ කාල පරාසයක් කළමනාකරණය කළ හැකිය. දත්ත පාඨමාලව සුරැකීමේදී, TIMESTAMP වර්තමාන කාල කලාපය භාවිතා කරයි, සහ දත්ත ලබාගැනීමේදී, එය පද්ධති කාල කලාපය මත පදනම්ව ස්වයංක්රීයව පරිවර්තනය වේ.
TIMESTAMP සහ DATETIME අතර වෙනස්කම්
DATETIME දත්ත වර්ගය TIMESTAMP සමඟ සංසන්දනය කිරීම සුලබයි. DATETIME දිනය සහ කාල වටිනාකම් “අවුල්” ලෙස සංරක්ෂණය කරයි, එබැවින් සංරක්ෂිත දත්ත කාල කලාපවලින් බලපෑම් නොරැඳෙයි. එහෙත්, TIMESTAMP සංරක්ෂණයේදී UTC වෙත පරිවර්තනය වන අතර ලබාගැනීමේදී පද්ධති කාල කලාපය වෙත පරිවර්තනය වේ, එය පරිසර අනුව කාල偏移 වැළැක්වීමට උපකාරී වේ.
උදාහරණයක් ලෙස, TIMESTAMP පද්ධති සංක්රමණයේදී හෝ බහු කාල කලාප දත්ත පාඨමාලවල සමඟ වැඩ කිරීමේදී විශේෂයෙන් යොදාගත හැකිය. DATETIME වඩාත් පුළුල් පරාසයක්—අවුරුදු 1000 සිට 9999 දක්වා—සහාය දක්වයි, එබැවින් එය Year 2038 ගැටලුව වැළැක්වීම සඳහා බොහෝ විට භාවිතා වේ.
TIMESTAMP හි උදාහරණ භාවිතය
ඔබට පහත පරිදි TIMESTAMP භාවිතයෙන් වගුවක් සාදාගත හැකිය.
CREATE TABLE events (
id INT AUTO_INCREMENT PRIMARY KEY,
event_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
මෙම උදාහරණයේදී, event_time වර්තමාන කාලය සංරක්ෂණය කරයි වාර්තාවක් ඇතුළු කරන විට ස්වයංක්රීයව, සහ වාර්තාව යාවත්කාලීන කිරීමේදී එම වටිනාකම බිඳ වැටෙයි.
2. TIMESTAMP හි මූලික භාවිතය
MySQL හි TIMESTAMP භාවිතා කිරීමේදී, වටිනාකම් ඇතුළු කිරීම සහ ලබාගැනීමේ මූලික ක්රම තේරුම් ගැනීම වැදගත් වේ. පහත දැක්වෙන්නේ TIMESTAMP දත්ත සමඟ වැඩ කිරීමේ සුලබ ක්රම කිහිපයකි.
දිනයක් සහ කාලයක් ඇතුළු කිරීම
TIMESTAMP වර්ගයකට දත්ත ඇතුළු කිරීමේදී, ඔබ සාමාන්යයෙන් දිනය සහ කාලය විශේෂණ ආකෘතියකින් විශිෂ්ට කරනවා. දිනය “YYYY-MM-DD” ලෙස නිරූපණය වන අතර කාලය “hh:mm:ss” ලෙස වේ.
INSERT INTO events (event_time) VALUES ('2023-10-01 12:30:00');
මෙම SQL ප්රකාශනය 2023 ඔක්තෝබර් 1 වන දින 12:30:00 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 වාර්තාව සාදන විට වර්තමාන කාලයට සකස් වන අතර, වාර්තාව යාවත්කාලීන කිරීමේදී එය යාවත්කාලීන වේ.

3. TIMESTAMP සහ කාල කලාප සමඟ වැඩ කිරීම
TIMESTAMP හි විශාලතම විශේෂාංගයක් වන්නේ කාල කලාප කළමනාකරණයයි. සංරක්ෂිත දත්ත සැමවිටම UTC වෙත පරිවර්තනය වන අතර, ඔබ එය දත්ත පාඨමාලෙන් ලබාගන්නා විට, එය පද්ධති කාල කලාපයට ගැලපෙන පරිදි නැවත පරිවර්තනය වේ.
කාල කලාප සැකසුම පරීක්ෂා කිරීමේ ක්රමය
MySQL හි, ඔබට කාල කලාපය සේවාදායකයාගේ හෝ සැසියකට සකස් කළ හැකිය. ඔබට SHOW VARIABLES ප්රකාශනය භාවිතයෙන් කාල කලාප සැකසුම පරීක්ෂා කළ හැකිය.
SHOW VARIABLES LIKE 'time_zone';
මෙම ප්රකාශනය දත්ත පාඨමාල සඳහා වර්තමානයේ සකස් කර ඇති කාල කලාපය ආපසු දෙයි. කාල කලාපය වෙනස් කිරීමට, පහත ප්රකාශනය භාවිතා කරන්න.
SET time_zone = '+09:00';
TIMESTAMP සහ DATETIME අතර කාල කලාප වෙනස්කම්
DATETIME වර්ගය කාල කලාප සලකා බැලීමකින් තොරව දිනය සහ කාලය සංරක්ෂණය කරයි, එහෙත් TIMESTAMP වර්ගය සුරැකීමේදී UTC වෙත පරිවර්තනය වේ. එබැවින්, බහු කාල කලාප පරිසරවල, TIMESTAMP බොහෝ විට වඩා හොඳ තේරීමකි.
4. Year 2038 ගැටලුව සහ එහි බලපෑම
2038 වසරේ ගැටලුව 32-බිට් පද්ධතිවල TIMESTAMP වර්ගයේ සීමාවන් නිසා ඇති වේ. MySQL හි TIMESTAMP වර්ගය 1970 ජනවාරි 1 වන දින UTC 00:00:00 සිට තත්පර ගණන මත පදනම් වේ. එය 2038 ජනවාරි 19 වන දින UTC 03:14:07 ඉක්මවන විට, මෙම වටිනාකම ඉක්මනින් පිරී යයි.
2038 වසරේ ගැටලුව වළක්වා ගන්නේ කෙසේද
මෙම ගැටලුව වළක්වා ගැනීමට, 64-බිට් පද්ධතියක් හෝ විස්තීර්ණ පරාසයක් ඇති DATETIME වර්ගය භාවිතා කිරීම නිර්දේශ කෙරේ. DATETIME 1000 සිට 9999 දක්වා වූ වර්ෂවල දින සහ වේලාවන් කළමනාකරණය කළ හැකි බැවින්, එය 2038 ට ඔබ්බෙන් ආරක්ෂිතව භාවිතා කළ හැක.
ඔබට මෙම ගැටලුව වළක්වා ගැනීමට ඔබේ පද්ධතිය යාවත්කාලීන කිරීමෙන්ද පුළුවන්. 64-බිට් පද්ධතිවල 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
);
ඔබට DEFAULT 0 නිර්ශචනය කිරීමෙන් 0000-00-00 00:00:00 යන අවලංගු දින වේලාව අකොපි වශයෙන් සකස් කළ හැක. නමුත්, මෙය නිර්දේශ නොකෙරේ. MySQL හි දැඩි SQL ආකාරයේදී, මෙම අවලංගු දින වේලාව දෝෂ ඇති කළ හැක.
0000-00-00 00:00:00 ගැටලුව
කිහිපයක් MySQL සංස්කරණ 0000-00-00 00:00:00 අවලංගු දින වේලාව ලෙස සහාය දක්වන නමුත්, එය සැබෑ ලෝක පද්ධතිවල මෙහෙයුම් ගැටලු ඇති කළ හැක. විශේෂයෙන්, දත්ත අඛණ්ඩතාවයට ප්රමුඛත්වය දෙන පද්ධතිවල මෙවැනි අවලංගු වටිනාකම් වළක්වා ගත යුතුය. ඒ වෙනුවට, 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';
මෙම විධානය දත්ත ගබඩා වේලාව ටෝකියෝ වෙත සකස් කර, UTC වෙතින් පරිවර්තන වල නිවැරදි කළමනාකරණය සනාථ කරයි.

7. සාරාංශය සහ නිර්දේශ
TIMESTAMP වර්ගය MySQL හි දිනයන් සහ වේලාවන් කාර්යක්ෂමව කළමනාකරණය කිරීම සඳහා ශක්තිමත් මෙවලමකි. විශේෂයෙන්, වේලාව කලාප සමඟ ස්වයංක්රීය පරිවර්තනය සහ නිර්මාණ/යාවත්කාලීන කිරීමේදී ස්වයංක්රීය වේලාව ලේඛනය කිරීම ඉතා පහසුය. එහෙත්, 2038 වසරේ ගැටලුව සහ NULL අගයන් කෙසේ හසුරවන්නේද යන සීමා සහ අවධානම් තේරුම් ගැනීම වැදගත් වේ.
TIMESTAMP භාවිතා කළ යුතු අවස්ථා
- ඔබට ස්වයංක්රීය යාවත්කාලීන හැසිරීම අවශ්ය වන විට,
TIMESTAMPඉතා සුදුසුය—විශේෂයෙන්, ලේඛනය යාවත්කාලීන වන සෑම වරක්ම ස්වයංක්රීයව ටයිම්ස්ටැම්ප් එක ලේඛනය කිරීමට අවශ්ය නම්. - වේලාව කලාප සැලකිල්ලට ගත යුතු පද්ධති තුළ,
TIMESTAMPහි UTC‑අධාරිත පරිවර්තන හැසිරීම ප්රයෝජනවත් වේ. - වෙනත් පාර්ශවයෙන්, ඔබට ඉදිරි කාල සීමාව අවශ්ය නම් හෝ සහාය දක්වන පරාසයට පිටත දිනයන් (2038 පසු) හසුරවිය යුතු නම්,
DATETIMEභාවිතා කිරීම සලකා බලන්න.
අවසානයේ, ඔබේ පද්ධති අවශ්යතා අනුව TIMESTAMP සහ DATETIME අතර තේරීම කර, දත්ත අඛණ්ඩතාවය සහ නඩත්තු හැකියාව තහවුරු කරගන්න.
8. නිතර අසන ප්රශ්න (FAQ)
MySQL TIMESTAMP සම්බන්ධ ප්රශ්න සහ ගැටළු සංවර්ධකයන් අතර සාමාන්ය වේ, එබැවින් මෙම කොටස නිතර අසන ප්රශ්න සාරාංශ කරයි. මෙම FAQ ගණනාව TIMESTAMP නිවැරදිව හසුරවීමට උපකාරී උපදෙස් සහ විසඳුම් ලබා දෙයි.
TIMESTAMP සහ DATETIME අතර තේරීම කෙසේ කළ යුතුද?
TIMESTAMP UTC භාවිතා කර වේලාව කලාප අනුව අගයන් ස්වයංක්රීයව පරිවර්තනය කරයි, එබැවින් බහු වේලාව කලාප සැලකිල්ලට ගත යුතු යෙදුම් සහ පද්ධති සඳහා සුදුසුය. එය ලේඛන නිර්මාණය හෝ යාවත්කාලීන කිරීමේදී දිනය/වේලාව අගයන් ස්වයංක්රීයව සුරකින්නටද සහාය දක්වයි. එයට විරුද්ධව, DATETIME අගයන් “ඇති පරිදි” සුරකින බැවින්, වේලාව කලාප පරිවර්තනය නොකළ තත්ත්වයේ සමාන්ය datetime කළමනාකරණයක් අවශ්ය වන විට වඩා හොඳය.
TIMESTAMP 2038 පසු භාවිතා කළ නොහැකි බව සත්යද?
ඔව්. 2038 වසරේ ගැටලුව 32‑බිට් TIMESTAMP වර්ගයට අදාළ වේ. එය 1970 ජනවාරි 1 සිට තත්පර ගණන මත පදනම් වූ බැවින්, 2038 ජනවාරි 19 පසු දිනයන් නිරූපණය කළ නොහැක. මෙය වැළැක්වීමට, 64‑බිට් පද්ධතියකට මාරු වීම හෝ 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 අගයන් අතින් ඇතුළත් කළ හැක.


