আমার কি মাইএসকিউএলে ডেটটাইম বা টাইমস্ট্যাম্প ডেটা টাইপ ব্যবহার করা উচিত?


2683

আপনি কি ডেটটাইম বা টাইমস্ট্যাম্প ক্ষেত্রটি ব্যবহার করার পরামর্শ দিচ্ছেন এবং কেন (মাইএসকিউএল ব্যবহার করছেন)?

আমি সার্ভার সাইডে পিএইচপি দিয়ে কাজ করছি।



আপনি যদি চান আপনার আবেদনটি ফেব্রুয়ারিতে ভেঙে যায়, 2038 টাইমস্ট্যাম্প ব্যবহার করুন। তারিখের সীমা পরীক্ষা করুন।
উইলসন হক

উত্তর:


1829

মাইএসকিউএল-তে টাইমস্ট্যাম্পগুলি সাধারণত রেকর্ডে পরিবর্তনগুলি ট্র্যাক করতে ব্যবহৃত হয় এবং প্রতিবার রেকর্ডটি পরিবর্তিত হওয়ার সাথে সাথে আপডেট করা হয়। আপনি যদি একটি নির্দিষ্ট মান সঞ্চয় করতে চান তবে আপনার একটি ডেটটাইম ক্ষেত্র ব্যবহার করা উচিত।

যদি আপনি বোঝাতে চেয়েছিলেন যে আপনি ইউনিক্স টাইমস্ট্যাম্প বা নেটিভ মাইএসকিউএল ডেটটাইম ফিল্ডটি ব্যবহার করার মধ্যে সিদ্ধান্ত নিতে চান তবে নেটিভ ফর্ম্যাটটি নিয়ে যান। আপনি এইভাবে মাইএসকিউএল এর মধ্যে গণনা করতে পারেন ("SELECT DATE_ADD(my_datetime, INTERVAL 1 DAY)")এবং ("SELECT UNIX_TIMESTAMP(my_datetime)")আপনি যখন পিএইচপি দিয়ে এটি পরিচালনা করতে চান তবে রেকর্ডটি জিজ্ঞাসা করার সময় মানের বিন্যাসটিকে ইউনিক্স টাইমস্ট্যাম্পে পরিবর্তন করা সহজ ।


980
একটি গুরুত্বপূর্ণ পার্থক্য হ'ল DATETIMEএকটি তারিখ (যেমনটি একটি ক্যালেন্ডারে পাওয়া যায়) এবং একটি সময় (যেমন একটি দেয়ালের ঘড়িতে লক্ষ্য করা যায়) TIMESTAMPউপস্থাপন করা হয় , তবে সময়ে একটি নির্দিষ্ট সংজ্ঞাযুক্ত পয়েন্ট উপস্থাপন করে। আপনার অ্যাপ্লিকেশন সময় অঞ্চল পরিচালনা করে তবে এটি খুব গুরুত্বপূর্ণ হতে পারে। '2010-09-01 16:31:00' কত আগে ছিল? আপনি কোন টাইম জোনে রয়েছেন তার উপর এটি নির্ভর করে me আমার জন্য এটি কয়েক সেকেন্ড আগে ছিল, আপনার জন্য এটি ভবিষ্যতে কোনও সময়ের প্রতিনিধিত্ব করতে পারে। যদি আমি '1970-01-01 00:00:00 ইউটিসি' এর পরে 1283351460 সেকেন্ড বলি, আপনি ঠিক কী পয়েন্ট নিয়ে কথা বলবেন তা আপনি জানেন। (নীচের নীড় এর চমৎকার উত্তর দেখুন)। [ডাউনসাইড: বৈধ ব্যাপ্তি]।
ম্যাটবিয়ানকো

121
আর একটি পার্থক্য: "নেটিভ" ডেটটাইমের সাথে অনুসন্ধানগুলি ক্যাশ করা হবে না, তবে টাইমস্ট্যাম্পের সাথে অনুসন্ধানগুলি হবে।
ওজেড_

39
"মাইএসকিউএল-তে টাইমস্ট্যাম্পগুলি সাধারণত রেকর্ডে পরিবর্তনগুলি ট্র্যাক করতে ব্যবহৃত হত" এটিকে ভাল উত্তর বলে মনে করবেন না। টাইমস্ট্যাম্প ম্যাটবিয়ানকো এবং নীর সাদির চেয়ে অনেক বেশি শক্তিশালী এবং জটিল। যদিও, উত্তরের দ্বিতীয় অংশটি খুব ভাল। ব্লিভেট যা বলেছেন তা সত্য এবং এটি একটি ভাল পরামর্শ।
সান্তিয়াগোবসুলতো

10
এছাড়াও 1 টি গুরুত্বপূর্ণ নোট, DATETIME এবং TIMESTAMP CURRENT_TIMESTAMP, NOW () সম্মানের সাথে এটি ডিফল্ট মান হিসাবে ব্যবহার করতে পারে তবে উদাহরণস্বরূপ তারিখটি পারে না, কারণ এটি ডিফল্টরূপে '0000-00-00' ব্যবহার করে, সুতরাং বিষয়টি সমাধান করতে ইউ লিখতে হবে সেই তারিখে আপনার নিজের ট্রিগার, তারিখ মাইএসকিএল টাইপ সহ ক্ষেত্র / কলামে বর্তমান তারিখ (সময় ব্যতীত) সন্নিবেশ করানোর জন্য table
আর্থার কুশমান

14
@ ডেভিড হার্কনেস: ডকুমেন্টেশন বলছে "স্বয়ংক্রিয় বৈশিষ্ট্যগুলি নির্দিষ্ট করতে, ডিফল্ট কর্যর্নT_TIMESTAMP
প্ল্যাপ

916

মাইএসকিউএল 5 এবং তারপরে , টাইমস্ট্যাম্প মানগুলি বর্তমান সময়ের অঞ্চল থেকে সঞ্চয়স্থানের জন্য ইউটিসিতে রূপান্তরিত হয় এবং পুনরুদ্ধারের জন্য ইউটিসি থেকে বর্তমান সময় অঞ্চলে রূপান্তরিত হয়। (এই শুধুমাত্র TIMESTAMP এ ডাটা টাইপ জন্য হয় এবং না এমন DATETIME এ হিসাবে অন্যান্য ধরনের জন্য।)

ডিফল্টরূপে, প্রতিটি সংযোগের জন্য বর্তমান সময় অঞ্চলটি সার্ভারের সময়। মাইএসকিউএল সার্ভারের সময় অঞ্চল সমর্থন হিসাবে বর্ণিত হয়েছে প্রতি সংযোগ ভিত্তিতে সময় অঞ্চল নির্ধারণ করা যেতে পারে ।


11
এই ওরিলি উপস্থাপনাটি এই বিষয়টির জন্য খুব ভাল (পিডিএফ দুঃখিত) cdn.oreillystatic.com/en/assets/1/event/36/…
gcb

13
এটি ইভেন্টটির প্রকৃতি সম্পর্কেও: - একটি ভিডিও-সম্মেলন (টাইমস্ট্যাম্প)। সমস্ত অ্যাটেন্ডেন্টের উচিত সময়সীমের সাথে সামঞ্জস্য হওয়া নিরঙ্কুশ সময়ের তাত্ক্ষণিকের একটি উল্লেখ। - একটি স্থানীয় টাস্ক টাইম (DATETIME), আমার এই কাজটি করা উচিত 2014/03/31 সকাল 9: 00 এ, আমি যদি নিউইয়র্ক বা প্যারিসে কাজ করছি সেদিনের কোনও বিষয় নেই। আমি স্থানীয় সময় আমি সকাল 8 টা থেকে 8:00 এ কাজ শুরু করব।
yucer

1
সুতরাং আমি যদি সার্ভারের সময় অঞ্চল পরিবর্তন করি তবে টাইমস্ট্যাম্পের মান একই থাকবে বা এটিও পরিবর্তন হবে ??
অ্যান্ড্রু

3
@ অ্যান্ড্রু এটি ইউটিসি হওয়ার পরে এটি ইউটিসি থাকবে। পশ্চাদপদ রূপান্তরটি "নতুন" সার্ভারের সময় অঞ্চলে পরিবর্তিত হবে।
নিম্মিলটন

@ আইসার - আমি সেভাবে চিন্তা করার পরামর্শ দিই না। বিশ্ব অর্থনীতিতে সর্বাধিক ধারাবাহিক ব্যবহার হ'ল স্টোরেজটির জন্য সমস্ত তারিখের সময়কে ইউটিসিতে রূপান্তর করা। কনভেনশন দ্বারা, ডেটটাইমটিকে ইউটিসি ক্ষেত্র হিসাবে বিবেচনা করুন। এটি ইউটিসিতে রূপান্তর করতে ডেটটাইমগুলি ইনপুট করে এমন সমস্ত কাজের উপর চাপ ফেলে, তবে এটি একটি ক্লিনার ডিজাইন দীর্ঘমেয়াদী। অবশ্যই, তাদের বর্তমান সেটিংসের ভিত্তিতে ব্যবহারকারীর কাছে তথ্য উপস্থাপন করুন। যদি ব্যবহারকারী "প্যারিসে 09:00" প্রবেশ করতে চান, তবে তাদের প্যারিস সময় নির্ধারণ করুন, তারপরে 09:00 লিখুন। তারপরে নিউইয়র্কের যেকোনো ব্যক্তি টেলিকনফারেন্স করতে খুব সহজেই তাদের সময় জেগে ওঠার প্রয়োজনীয় সময়টি খুঁজে পেতে পারেন
টুলমেকারস্টেভ

523

আমি সর্বদা সারি মেটাডেটা (তারিখ তৈরি বা সংশোধিত) ব্যতীত অন্য কিছুর জন্য DATETIME ক্ষেত্রগুলি ব্যবহার করি।

মাইএসকিউএল ডকুমেন্টেশনে যেমন উল্লেখ করা হয়েছে:

আপনার যখন তারিখ এবং সময় উভয় তথ্য ধারণ করে এমন মানগুলির প্রয়োজন হয় তখন DATETIME প্রকারটি ব্যবহৃত হয়। মাইএসকিউএল 'YYYY-MM-DD এইচ: এমএম: এসএস' ফর্ম্যাটে DATETIME মানগুলি পুনরুদ্ধার করে এবং প্রদর্শন করে। সমর্থিত পরিসরটি '1000-01-01 00:00:00' থেকে '9999-12-31 23:59:59'।

...

টাইমস্ট্যাম্প ডেটা টাইপের '1970-01-01 00:00:01' ইউটিসি থেকে '2038-01-09 03:14:07' ইউটিসি এর ব্যাপ্তি রয়েছে। মাইএসকিউএল সংস্করণ এবং সার্ভারটি যে এসকিউএল মোডে চলছে তার উপর নির্ভর করে এর বিভিন্ন বৈশিষ্ট্য রয়েছে।

আপনি সাধারণ ব্যবহারে টাইমস্ট্যাম্পগুলিতে নিম্ন সীমাটি হিট করার যথেষ্ট সম্ভাবনা রয়েছেন - যেমন জন্ম তারিখ সংরক্ষণ করা।


194
আপনি ব্যাংকিং বা রিয়েল এস্টেটে থাকলে সহজেই উপরের সীমাটি আঘাত করতে পারেন ... 30 বছরের বন্ধক এখন 2038 ছাড়িয়ে যাবে
কিপ

16
অবশ্যই, 64-বিট ইউনিক্স টাইমস্ট্যাম্পগুলি ব্যবহার করুন। উদাহরণস্বরূপ, জাভাতে new Date().getTime()ইতিমধ্যে আপনাকে একটি 64-বিট মান দেয়।
osa

5
ডেটাটাইমের জন্য +1: আমাদের ডেটা প্রবাহে, ক্রয় এবং চালানের জন্য ফিজিক্যাল স্টোরের এসকিউএল সার্ভার থেকে, ওয়েবপৃষ্ঠায় ভার্চুয়াল স্টোরের জন্য মাইএসকিউএল সার্ভারে স্থানান্তরিত হয়েছে, ডেটটাইম পরিবর্তনের তারিখ-সময়ের জন্য আরও ভাল কারণ এই ডাটা টাইপের লেনদেনেও বিদ্যমান রয়েছে -SQL। তবে টাইমস্ট্যাম্পের অর্থ লেনদেন-এসকিউএল-তে অন্য জিনিস, এটি বাইনারি যেমন রাউভারশন, যদিও মাইএসকিউএল টাইমস্ট্যাম্প ডেটটাইম অনুরূপ। সুতরাং আমরা দুটি ডিবি'র সামঞ্জস্যের জন্য TIMESTAMP ব্যবহার এড়াতে চাই।
জাকোঃ

10
কোন ধারণা নেই. এটি কেবল মাইএসকিউএল এর চেয়ে অনেক বড় সমস্যা এবং এর কোনও সহজ সমাধান নেই: en.wikedia.org/wiki/Year_2038_ সমস্যা আমি বিশ্বাস করি না যে মাইএসকিউএল ঠিক টাইমস্ট্যাম্পগুলি এখন -৪-বিট হিসাবে ঘোষণা করতে পারে এবং ধরে নিই যে সবকিছু ঠিক আছে। তারা হার্ডওয়্যার নিয়ন্ত্রণ করে না।
স্ক্রোনাইড

5
আমার জন্মের তারিখটি DATETIME হতে পারে যদি আপনি জন্মের সময়টি জানেন, যেমনটি আমি আমার জন্য করি।
ক্রিস ক্রেগ

322

উদাহরণ নিচে কীভাবে TIMESTAMPতারিখ টাইপ পরিবর্তন করার পর মান পরিবর্তিত time-zone to 'america/new_york'যেখানে DATETIMEঅপরিবর্তিত।

mysql> show variables like '%time_zone%';
+------------------+---------------------+
| Variable_name    | Value               |
+------------------+---------------------+
| system_time_zone | India Standard Time |
| time_zone        | Asia/Calcutta       |
+------------------+---------------------+

mysql> create table datedemo(
    -> mydatetime datetime,
    -> mytimestamp timestamp
    -> );

mysql> insert into datedemo values ((now()),(now()));

mysql> select * from datedemo;
+---------------------+---------------------+
| mydatetime          | mytimestamp         |
+---------------------+---------------------+
| 2011-08-21 14:11:09 | 2011-08-21 14:11:09 |
+---------------------+---------------------+

mysql> set time_zone="america/new_york";

mysql> select * from datedemo;
+---------------------+---------------------+
| mydatetime          | mytimestamp         |
+---------------------+---------------------+
| 2011-08-21 14:11:09 | 2011-08-21 04:41:09 |
+---------------------+---------------------+

আমি আমার উত্তরটিকে নিবন্ধে রূপান্তরিত করেছি যাতে আরও বেশি লোক এই দরকারী, মাইএসকিউএল: ডেটটাইম ভার্সাস টাইমস্ট্যাম্প ডেটা টাইপগুলি খুঁজে পেতে পারে ।


55
ঠিক আছে, DATETIMEসময়-অঞ্চল পরিবর্তনের সাথে কার্যকরী সময় পরিবর্তিত হয়েছিল, পরিবর্তিত TIMESTAMPহয়নি তবে মানুষের প্রতিনিধিত্ব হয়েছে।
ফ্লিন্ডবার্গ

3
মনে হচ্ছে এই কমান্ডটি মাইএসকিউএল 5.6 এ কাজ করে না set time_zone="america/new_york";
মঞ্জুনাথ রেড্ডি

নির্ধারিত সময়_ জোন ইস্যুর উত্তর এখানে। stackoverflow.com/questions/3451847/mysQL- টাইমজোন- পরিবর্তন
মঞ্জুনাথ রেড্ডি

2
@ ফ্লিনবার্গের সাথে একমত টাইমস্ট্যাম্প সময় অঞ্চল পরিবর্তনের পরে তারিখের সময় নয়, সঠিক সময়কে উপস্থাপন করে
নিতিন বানসাল

193

মূল পার্থক্য হ'ল DATETIME স্থির থাকে যখন TIMESTAMP time_zoneসেটিংস দ্বারা প্রভাবিত হয় ।

সুতরাং এটি কেবল তখনই গুরুত্বপূর্ণ যখন আপনার কাছে - বা ভবিষ্যতে থাকতে পারে - সময় অঞ্চলগুলি জুড়ে সিঙ্ক্রোনাইজ করা ক্লাস্টারগুলি।

সহজ কথায়: যদি অস্ট্রেলিয়ায় আমার কাছে একটি ডাটাবেস থাকে এবং আমেরিকাতে একটি ডাটাবেস সিঙ্ক্রোনাইজ / পপুলেট করার জন্য সেই ডাটাবেসটির একটি ডাম্প নিয়ে যায়, তবে টাইমস্ট্যাম্প নতুন সময় অঞ্চলে ইভেন্টের আসল সময়টি প্রতিফলিত করার জন্য আপডেট করবে, যখন ডেটটাইম তবুও এউ টাইম জোনে ইভেন্টের সময় প্রতিফলিত করে

DATETIME ব্যবহারের একটি দুর্দান্ত উদাহরণ যেখানে TIMESTAMP ব্যবহার করা উচিত ছিল তা হ'ল ফেসবুকে, যেখানে তাদের সার্ভারগুলি কখনই পুরো অঞ্চল জুড়ে কী টাইম স্টাফ ঘটেছিল তা কখনই পুরোপুরি নিশ্চিত হয় না। একবার আমি একটি কথোপকথন করছিলাম যাতে সময়টি বলেছিল যে বার্তাটি আসলে পাঠানোর আগে আমি বার্তাগুলির জবাব দিচ্ছি। (এটি অবশ্যই বার্তাগুলি সফ্টওয়্যারটিতে খারাপ সময় অঞ্চল অনুবাদ করার কারণে ঘটতে পারে যদি সময়গুলি সমন্বয় করার পরিবর্তে পোস্ট করা হত))


83
আমার মনে হয় না এটি ভাবার একটি ভাল উপায়। আমি কেবল ইউটিসিতে সমস্ত তারিখগুলি সঞ্চয় এবং প্রক্রিয়াজাত করব এবং নিশ্চিত হয়েছি যে সামনের-শেষটি প্রদত্ত সময় অঞ্চল অনুসারে এটি প্রদর্শিত হবে। এই পদ্ধতির সহজ এবং অনুমানযোগ্য।
কোস

8
@ কোস: ইউটিসি-তে সমস্ত তারিখগুলি সংরক্ষণ এবং প্রক্রিয়াজাতকরণ করছে না টাইমস্ট্যাম্প অভ্যন্তরীণভাবে যা করছে? (তারপরে এটি আপনার স্থানীয় সময়
অঞ্চলটি

10
আমার স্থানীয় সময় অঞ্চল? আপনার ডিবি আমার টাইমজোনটি কীভাবে জানতে পারবে? ;-) সাধারণত ডাটাবেস এবং ব্যবহারকারী ইন্টারফেসের মধ্যে বেশ কিছু প্রক্রিয়াজাতকরণ থাকে। আমি পুরো প্রক্রিয়াজাতকরণের পরে স্থানীয়করণ করি।
কোস

3
@ কোজ: আমার ডাটাবেস আপনার ডাটাবেস টাইমজোন জানেন না:! তবে এটি টাইমস্ট্যাম্পটি জানে। আপনার ডাটাবেসটি নিজস্ব টাইমজোন সেটিংটি জানে এবং টাইমস্ট্যাম্পের ব্যাখ্যা / উপস্থাপন করার সময় এটি প্রয়োগ করে। বেইজিংয়ের ১১ ই ডিসেম্বর ২০১৩ সকাল ১১:৩০ সিডনি অস্ট্রেলিয়ায় ১১ ই ডিসেম্বর ২০১৩ সকাল ১১:০। সময় মতো একই মুহুর্ত নয় China গুগল: 'টাইম অঞ্চল' এবং 'প্রাইম মেরিডিয়ান'।
Ekerner

2
মাইএসকিউএল সংগ্রহের জন্য টাইমস্ট্যাম্প মানকে বর্তমান সময় অঞ্চল থেকে ইউটিসিতে রূপান্তর করে এবং পুনরুদ্ধারের জন্য ইউটিসি থেকে বর্তমান সময় অঞ্চলে ফিরে আসে। (এটি অন্যান্য ধরণের যেমন DATETIME- র ক্ষেত্রে ঘটে না)) dev.mysql.com/doc/refman/5.5/en/datetime.html
মাহডিফো

124

আমি এই সিদ্ধান্তটি একটি অর্থপূর্ণ বেসে নিয়েছি।

যখন সময়টিতে (কম বা কম) নির্দিষ্ট পয়েন্ট রেকর্ড করা দরকার তখন আমি একটি টাইমস্ট্যাম্প ব্যবহার করি। উদাহরণস্বরূপ, যখন কোনও রেকর্ডটি ডাটাবেজে প্রবেশ করানো হয়েছিল বা যখন কোনও ব্যবহারকারীর ক্রিয়া হয়েছিল।

আমি তারিখের সময় ক্ষেত্রটি ব্যবহার করি যখন তারিখ / সময় সেট করা যায় এবং নির্বিচারে পরিবর্তন করা যায়। উদাহরণস্বরূপ যখন কোনও ব্যবহারকারী পরে অ্যাপয়েন্টমেন্টগুলি পরিবর্তন করতে পারেন।


টাইমস্ট্যাম্প- সময়ে নির্দিষ্ট পয়েন্ট, সমন্বিত ইউনিভার্সাল সময় তারিখের সময় - একটি দৃষ্টিকোণ সম্পর্কিত, একটি সময়ের রেফারেন্সের সাথে (স্থানীয় সময় হিসাবে) হতে পারে .. স্থানীয় সময় সমন্বিত হতে পারে?
yucer

110

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

  1. আপনি বিক্রেতা লক-ইন এড়ান avoid খুব বেশি প্রতিটি ডাটাবেস অপেক্ষাকৃত অনুরূপ ফ্যাশনে পূর্ণসংখ্যার সমর্থন করে। মনে করুন আপনি অন্য একটি ডাটাবেসে যেতে চান। আপনি কি মাইএসকিউএল এর DATETIME মানগুলির মধ্যে পার্থক্য সম্পর্কে চিন্তা করতে চান এবং কীভাবে ওরাকল এগুলি সংজ্ঞায়িত করেন? এমনকি মাইএসকিউএলের বিভিন্ন সংস্করণগুলির মধ্যেও, টাইমস্ট্যামপ্সে নির্ভুলতার একটি আলাদা স্তর রয়েছে। এটি কেবলমাত্র মাইএসকিউএল টাইমস্ট্যাম্পগুলিতে মিলিসেকেন্ডগুলিকে সমর্থন করেছিল।
  2. টাইমজোন সমস্যা নেই। বিভিন্ন ডেটা টাইপের সাথে টাইমজোনগুলির সাথে কী ঘটে যায় সে সম্পর্কে এখানে কিছু অন্তর্দৃষ্টিপূর্ণ মন্তব্য রয়েছে। তবে এটি কি সাধারণ জ্ঞান, এবং আপনার সহকর্মীরা সকলেই এটি শিখতে সময় নেবে? অন্যদিকে, বিগআইএনটি কে জাভা.ইউটি.এল.তে রূপান্তরিত করা খুব জটিল। একটি বিআইজিআইএনটি ব্যবহারের ফলে টাইমজোনগুলি অনেকগুলি সমস্যার মুখোমুখি হয়ে যায়।
  3. ব্যাপ্তি বা নির্ভুলতা নিয়ে কোনও উদ্বেগ নেই। ভবিষ্যতের তারিখের সীমা দ্বারা সংক্ষিপ্তভাবে কী কেটে নেওয়া হচ্ছে সে সম্পর্কে আপনাকে চিন্তা করার দরকার নেই (TIMESTAMP কেবলমাত্র 2038 এ যায়)।
  4. তৃতীয় পক্ষের সরঞ্জাম একীকরণ। একটি পূর্ণসংখ্যার ব্যবহার করে, এটি তৃতীয় পক্ষের সরঞ্জামগুলির জন্য উদাহরণস্বরূপ (যেমন EclipseLink) ডাটাবেসের সাথে ইন্টারফেস করতে। প্রতিটি তৃতীয় পক্ষের সরঞ্জাম মাইএসকিউএল এর মতো "ডেটটাইম" সমান উপলব্ধি করতে পারে না। হাইবারনেটে চেষ্টা করে দেখতে চাই এবং আপনি যদি এই কাস্টম ডেটা টাইপ ব্যবহার করেন তবে আপনাকে java.sql.TimeStamp বা java.util.Date অবজেক্টটি ব্যবহার করা উচিত কিনা? তৃতীয় পক্ষের সরঞ্জামগুলির সাথে আপনার বেস ডেটা প্রকারগুলি ব্যবহারের ব্যবহারকে তুচ্ছ।

এই সমস্যাটি নিবিড়ভাবে সম্পর্কিত যা আপনার কীভাবে কোনও ডাটাবেসে অর্থের মূল্য (অর্থাত্ 1.99 ডলার) সঞ্চয় করা উচিত। আপনার কি দশমিক, বা ডাটাবেসের অর্থের ধরণের ব্যবহার করা উচিত, বা সবচেয়ে খারাপের দ্বিগুণ? উপরে উল্লিখিত একই কারণে অনেকগুলির জন্য এই বিকল্পগুলির মধ্যে 3 টিই ভয়ঙ্কর। সমাধানটি হ'ল বিগিনটিটি ব্যবহার করে সেন্টগুলিতে অর্থের মূল্য সঞ্চয় করা এবং তারপরে আপনি যখন ব্যবহারকারীর কাছে মূল্য প্রদর্শন করেন তখন সেন্টগুলিকে ডলারে রূপান্তর করা। ডাটাবেসের কাজ হ'ল ডেটা সংরক্ষণ করা এবং সেই ডেটাটির ব্যাখ্যা দেওয়া না। এই সমস্ত অভিনব ডেটা-টাইপগুলি যা আপনি ডাটাবেজে দেখেন (বিশেষত ওরাকল) অল্প যোগ করে এবং আপনাকে বিক্রেতাকে লক-ইন করার রাস্তা দিয়ে শুরু করে।


12
আমি এই সমাধানটি পছন্দ করি। 2038 এ টাইমস্ট্যাম্পের মেয়াদ শেষ হওয়া একটি বড় সমস্যা। আসলেই এতটা দূরে নয়!
চার্লি ডালাসাস

4
@ চর্লিডালসাস আপনি কি মনে করেন যে বর্তমান সফ্টওয়্যারটি সেসময় সেখানে থাকবে :
পি

13
তারিখ অনুসারে ডেটা অনুসন্ধান করা শক্ত করে তোলে যদি এটি বহু মিলি
আলী

4
আপনি যদি বহনযোগ্যতা এবং একাধিক টাইম জোনের ব্যবহারকারী বা ব্যবহারকারীদের তুলনায় বিভিন্ন টাইম জোনের ডাটাবেসগুলির বিষয়ে যত্নশীল হন তবে এটিই সেরা সমাধান। TIMESTAMP যাওয়ার উপায় হতে পারে যদি এর ত্রুটিগুলি নকশা করে না। খুব খারাপ যে ভাঙা সমাধানগুলি আরও বেশি ভোট পেয়েছিল কারণ তারা তাড়াতাড়ি পোস্ট করা হয়েছিল (বছরগুলি)।
জার্মান

4
দুর্দান্ত সমাধান! এবং আপনি ঠিক "আবদ্ধ" হয়ে গেছেন। যখন আপনি অন্যকে "আপনার জন্য কাজ করতে" দেওয়ার অভ্যাসে পরিণত হন, তখন আপনি বিট এবং টুকরাগুলি হারাতে শুরু করেন যা আপনাকে প্রোগ্রামার করে তোলে।
এফএমসি

98

TIMESTAMP 4 বাইট Vs 8 বাইট DATETIME এর জন্য।

http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html

তবে স্ক্রোনাইড যেমন বলেছিল এটির বছরের কম সীমাবদ্ধতা আছে 1970। ভবিষ্যতে ঘটতে পারে এমন যে কোনও কিছুর জন্য এটি দুর্দান্ত;)


185
ভবিষ্যতে 2038-01-19 03:14:07 ইউটিসি-তে শেষ হবে।
ম্যাটবিয়ানকো

5
ওটা বোকামি. আমি ভেবেছিলাম টাইমস্ট্যাম্প টাইপটি "ভবিষ্যতের প্রস্তুত" হবে কারণ এটি তুলনামূলকভাবে নতুন। ডেটটাইমটিকে ইউটিসিতে রূপান্তর করতে এবং প্রতিবার বিভিন্ন সময় অঞ্চলগুলির সাথে কাজ করার সময় আপনি ফিরে আসতে বিরক্ত করতে পারবেন না। তাদের TIMESTAMP বড় করা উচিত ছিল .. কমপক্ষে 1 বাইট বড় bigger এটি 68 * 255 = 17340 বছর আরও যুক্ত করবে ... যদিও এটি 32 বিট সারিবদ্ধ হবে না।
নিকসফট

10
আপনি কি জানেন যে কেন TIMESTAMP 2038 এ শেষ হয়? কারণ এটি একটি পূর্ণসংখ্যা এবং পূর্ণসংখ্যার সীমা রয়েছে যা 2147483647 I আমি মনে করি এটিই কারণ। হতে পারে যদি তারা এর ধরণটি বার্চারে পরিবর্তন করে এবং কীভাবে কীভাবে এটি পরিচালনা করতে পারে তা পরিবর্তন করে, এটি "ভবিষ্যতের প্রস্তুত" হবে।
বিনসা

6
@ ভিন্সা, আমি ভাবি না যে এটি ততক্ষণে ভবিষ্যতে প্রস্তুত হয়ে যাবে। তবুও ওয়াই 2 কে বাগ মনে আছে? 2038 আসছে।
পেসারিয়ার

2
2038 এর মধ্যে, মাইএসকিউএল (এটি এখনও বিদ্যমান থাকলে) কেবলমাত্র 4 টি বাইটের বেশি ব্যবহার করতে এবং আরও বিস্তৃত পরিসরের জন্য
টাইমস্ট্যাম্প

95
  1. TIMESTAMP চারটি বাইট বনাম আট বাইট DATETIME এর জন্য।

  2. টাইমস্ট্যাম্পগুলি ডাটাবেসের উপরেও হালকা এবং দ্রুত সূচকযুক্ত।

  3. আপনার যখন তারিখ এবং সময় উভয় তথ্য ধারণ করে এমন মানগুলির প্রয়োজন হয় তখন DATETIME প্রকারটি ব্যবহৃত হয়। মাইএসকিউএল 'YYYY-MM-DD এইচ: এমএম: এসএস' ফর্ম্যাটে DATETIME মানগুলি পুনরুদ্ধার করে এবং প্রদর্শন করে। সমর্থিত পরিসরটি '1000-01-01 00:00:00 ′ থেকে' 9999-12-31 23:59:59 ′ ′

টাইমস্ট্যাম্প ডেটা টাইপের '1970-01-01 00:00:01 00 ইউটিসি থেকে' 2038-01-09 03:14:07 ′ ইউটিসি এর ব্যাপ্তি রয়েছে। মাইএসকিউএল সংস্করণ এবং সার্ভারটি যে এসকিউএল মোডে চলছে তার উপর নির্ভর করে এর বিভিন্ন বৈশিষ্ট্য রয়েছে।

  1. TIMESTAMP সময়_ অঞ্চল সেটিং দ্বারা প্রভাবিত হওয়ার সময় DATETIME স্থির থাকে।

6
আপনাকে # 4 টি স্পষ্ট করতে হবে: সঞ্চিত হিসাবে টাইমস্ট্যাম্প স্থির এবং সময় সম্পর্কিত অঞ্চল সম্পর্কিত অপেক্ষাকৃত (সম্পূর্ণ অজ্ঞাবলিক), যখন পুনরুদ্ধারের উপর প্রদর্শিত আউটপুট অনুরোধ সেশনের টাইমজোন দ্বারা প্রভাবিত হয়। DATETIME সর্বদা এটি যে সময় অঞ্চলটিতে রেকর্ড করা হয়েছিল তার সাথে তুলনামূলক, এবং সর্বদা সেই প্রসঙ্গে বিবেচনা করা উচিত, একটি দায়বদ্ধতা যা এখন অ্যাপ্লিকেশনটির হয়ে পড়ে।
ক্রিস্টোফার ম্যাকগোয়ান 27'16

1
দুর্দান্ত উত্তর। এই উত্তরে যোগ করার জন্য, আমরা যদি '2038-01-09 03:14:07' এর বাইরে মানগুলি সংরক্ষণ করার চেষ্টা করি, আমরা হয় একটি ত্রুটি পেয়েছি বা এটি '0000-00-00 00:00:00' হিসাবে সঞ্চিত হয়। আমি আমার ডাটাবেসের জন্য এই ত্রুটিটি পেয়েছি কারণ এতে টাইমশিফ্ট মান রয়েছে (এনক্রিপশনের উদ্দেশ্যে)।
কার্তিকস

এছাড়াও, 5.5 এর নীচে মাইএসকিএলের সংস্করণগুলিতে ডিএফএলটি মান সহ DATETIME এ সমস্যা আছে। dba.stackexchange.com/questions/132951/...
Velaro

47

প্রয়োগের উপর নির্ভর করে, সত্যই।

সঙ্ঘাইয়ের অ্যাপয়েন্টমেন্টের জন্য নিউ ইয়র্কের একটি সার্ভারে কোনও ব্যবহারকারী দ্বারা টাইমস্ট্যাম্প স্থাপনের বিষয়টি বিবেচনা করুন। এখন যখন ব্যবহারকারী সাংহাইতে সংযুক্ত হন, তিনি টোকিওতে মিরর সার্ভার থেকে একই অ্যাপয়েন্টমেন্ট টাইমস্ট্যাম্পটি অ্যাক্সেস করেন। তিনি টোকিও সময়ে অ্যাপয়েন্টমেন্টটি দেখতে পাবে, নিউ ইয়র্ক সময় থেকে অফসেটে।

সুতরাং একটি মান বা সময়সূচির মতো ব্যবহারকারীর সময়কে উপস্থাপন করে এমন মানগুলির জন্য, তারিখের সময়টি আরও ভাল। এটি সার্ভার সেটিংস নির্বিশেষে ব্যবহারকারীকে পছন্দসই তারিখ এবং সময় নিয়ন্ত্রণ করতে দেয়। সেট সময়টি সেট সময়, সার্ভারের সময় অঞ্চল, ব্যবহারকারীর সময় অঞ্চল দ্বারা প্রভাবিত হয় না বা দিবালোক সঞ্চয় সময় গণনা করার পদ্ধতিতে পরিবর্তিত হয় (হ্যাঁ এটি পরিবর্তিত হয়)।

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

টাইমস্ট্যাম্পগুলি ডাটাবেসের উপরেও হালকা এবং দ্রুত সূচকযুক্ত।


আপনার অ্যাপ্লিকেশনটি সার্ভারের সময় অঞ্চলের উপর নির্ভর করবে না। কোনও ক্যোয়ারী দেওয়ার আগে কোনও অ্যাপ্লিকেশনকে ডেটাবেস সংযোগের সেশনে সময় অঞ্চল নির্বাচন করা উচিত। যদি কোনও সংযোগ একাধিক ব্যবহারকারীর মধ্যে ভাগ করা হয় (উদা: ওয়েব অ্যাপ্লিকেশন), ইউটিসি ব্যবহার করুন এবং রেন্ডারিংয়ের দিকে টাইমজোন রূপান্তর করুন।
ডলমেন

42

2016 + : আমি যা পরামর্শ দিচ্ছি তা হল আপনার মাইএসকিএল টাইমজোনটি ইউটিসি-তে সেট করা এবং ডেটটাইম ব্যবহার করুন:

সাম্প্রতিক যে কোনও সামনের ফ্রেমওয়ার্ক (কৌণিক ১/২, প্রতিক্রিয়া, ভ্যু, ...) আপনার ইউটিসি ডেটটাইমটিকে স্থানীয় সময়ে রূপান্তর করতে পারে।

উপরন্তু:

(যদি না আপনি আপনার সার্ভারের টাইমজোন পরিবর্তন করতে পারেন)


AngularJs সহ উদাহরণ

// back-end: format for angular within the sql query
SELECT DATE_FORMAT(my_datetime, "%Y-%m-%dT%TZ")...

// font-end Output the localised time
{{item.my_datetime | date :'medium' }}

স্থানীয়করণের সমস্ত সময় বিন্যাস এখানে উপলভ্য: https://docs.angularjs.org/api/ng/filter/date


8
আপনার ডেটাগুলি আপনার সার্ভারের টাইম জোন সেটিংসের সাথে সংযুক্ত করা উচিত নয়। আপনার ডেস্কের নীচে যদি আপনার একক মাইএসকিএল বক্স থাকে তবে এটি আপনার পক্ষে কাজ করছে
জিন

@ জিন ইউটিসি মানে টাইমস্ট্যাম্পের মতো টাইমজোন নেই। আপনার সমস্ত সার্ভারগুলি ইউটিসিতে থাকলে কোনও সমস্যা নেই। আপনার যদি 2000 এর কনফিগারেশন থাকে তবে এটি আপনার পক্ষে কাজ করছে না।
সেবাস্তিয়ান হরিন

TIMESTAMP ভবিষ্যতে একটি 64 বিট মানতে আপগ্রেড করা যেতে পারে। তারপরে আর কোনও সমস্যা নেই।
twojr

এরকম কিছু ধরতে পুরো তৃতীয় পক্ষের লাইব্রেরি লোড করা পারফরম্যান্সের জন্য এত বড় হতে পারে না, তাই না? দেওয়া হয়েছে যে এটি ক্লায়েন্ট-সাইড এবং আপনার ডাটাবেসগুলিকে প্রভাবিত করে না ... তবুও, আপনি ফ্রন্ট-এন্ড যা কিছু করেন তার জন্য সার্ভারসাইড চেক প্রয়োজন। সুতরাং, সম্পূর্ণ চিত্রটির কথা চিন্তা করে, এটি কি গতি ইস্যুতে সত্যই সহায়তা করে? - এই মানদণ্ডগুলি উপায় দ্বারা কিছুটা অদ্ভুত, আমি অনুভব করি। টাইমস্ট্যাম্প ক্ষেত্রের তুলনা করতে কোয়েরিতে একটি স্ট্রিং ব্যবহার করাও বেশ অদ্ভুত বলে মনে হয়। এটিও পারফরম্যান্সের ক্ষতি করতে হবে, তাই না?
NoobishPro

1
সার্ভারের সময়_ জোনে আপনার আবেদনের উপর নির্ভর করবেন না। পরিবর্তে প্রতিটি ডাটাবেস সংযোগে সময়_ অঞ্চলটি নির্ধারণ করুন: ইউটিসির SET time_zone = '+0:00';জন্য।
ডলমেন

37

একটি timestampক্ষেত্র একটি বিশেষ ক্ষেত্রে দেখা যায় datetimeক্ষেত্র। আপনি timestampবিশেষ বৈশিষ্ট্য পেতে কলাম তৈরি করতে পারেন; এটি তৈরি এবং / অথবা আপডেটে হয় নিজেকে আপডেট করার জন্য সেট করা যেতে পারে।

"বৃহত্তর" ডাটাবেসের শর্তে timestampএটিতে বেশ কয়েকটি বিশেষ-মামলার ট্রিগার রয়েছে trig

সঠিকটি যা হয় তা সম্পূর্ণরূপে আপনি কী করতে চান তার উপর নির্ভর করে।


6
না, পার্থক্যটি কেবল "একটি বিশেষ কেস" নয়। কারণ সেশনটির সময় অঞ্চলগুলি যে মানগুলি সেট করে / কোয়েরি করে তা আলাদাভাবে জড়িত।
ডলম্যান

আপনি "আপনি সঠিকভাবে যা করতে চান তা পুরোপুরি নির্ভর করে আপনি যা করতে চান" তার উপর নির্ভর করে আমি আনন্দিত। এসই তে অনেকগুলি উত্তর রয়েছে যে পর্যাপ্ত সমর্থন ছাড়াই, "আপনারা কখনই এক্স করবেন না " বা "আপনার অবশ্যই সর্বদা ওয়াই করা উচিত "।
আগি হামারথিফ

37

টাইমস্ট্যাম্প সর্বদা ইউটিসি-তে থাকে (এটি ইউটিসি-তে 1970-01-01 সাল থেকে বিভক্ত সেকেন্ড) এবং আপনার মাইএসকিউএল সার্ভারটি সংযোগের সময়সীমার জন্য তারিখ / সময়কে স্বয়ংক্রিয়ভাবে রূপান্তর করে। দীর্ঘমেয়াদে, TIMESTAMP যাওয়ার উপায় কারণ আপনি জানেন যে আপনার অস্থায়ী ডেটা সর্বদা ইউটিসিতে থাকবে। উদাহরণস্বরূপ, আপনি অন্য সার্ভারে মাইগ্রেট করতে বা আপনি যদি আপনার সার্ভারের টাইমজোন সেটিংস পরিবর্তন করেন তবে আপনি আপনার তারিখগুলি আপ করবেন না।

দ্রষ্টব্য: ডিফল্ট সংযোগ টাইমজোন হ'ল সার্ভারের সময় অঞ্চল, তবে এটি প্রতি সেশনে পরিবর্তিত হওয়া উচিত (দেখুন SET time_zone = ...)।


29

DATETIME, TIMESTAMP এবং DATE এর মধ্যে তুলনা

এখানে চিত্র বর্ণনা লিখুন

এটা কি [। ফ্র্যাকশন]?

  • একটি DATETIME বা TIMESTAMP মান মাইক্রোসেকেন্ডে (6 ডিজিট) যথার্থতার মধ্যে একটি পিছনের ভগ্নাংশ সেকেন্ড অংশ অন্তর্ভুক্ত করতে পারে। বিশেষত, একটি DATETIME বা TIMESTAMP কলামে সঞ্চিত মানের কোনও ভগ্নাংশ অংশ বাতিল করার পরিবর্তে সংরক্ষণ করা হয়। এটি অবশ্যই .চ্ছিক।

সূত্র:


24

মাইএসকিউএলে এটি লক্ষণীয় যে আপনি টেবিলের কলামগুলি তৈরি করার সময় আপনি নীচের লাইনের সাথে কিছু ব্যবহার করতে পারেন:

on update CURRENT_TIMESTAMP

এটি প্রতিটি সারণীতে সময় আপডেট করে আপনি একটি সারি পরিবর্তন করেন এবং কখনও কখনও সঞ্চিত সর্বশেষ সম্পাদনা তথ্যের জন্য খুব সহায়ক। এটি কেবল টাইমস্ট্যাম্পের সাথে কাজ করে, তবে ডেটটাইম নয়।


23

মাইএসকিউএল এবং পিএইচপি এর সাথে কাজ করার সময় আমি সর্বদা একটি ইউনিক্স টাইমস্ট্যাম্প ব্যবহার করতাম। পিএইচপি-তে ডিফল্ট তারিখ পদ্ধতি হওয়ার মূল কারণটি প্যারামিটার হিসাবে একটি টাইমস্ট্যাম্প ব্যবহার করে, তাই কোনও বিশদকরণের প্রয়োজন হবে না।

পিএইচপি-তে বর্তমান ইউনিক্স টাইমস্ট্যাম্পটি পেতে, কেবল time();
মাইএসকিউএল করুন এবং করুন SELECT UNIX_TIMESTAMP();


6
-1 আমি আসলে নীচের উত্তরটি আরও ভাল বলে মনে করি - ডেটটাইম ব্যবহার করা আপনাকে মাইএসকিউএল নিজেই ডেট প্রসেসিংয়ের জন্য আরও যুক্তি যুক্ত করতে দেয় যা খুব কার্যকর হতে পারে।
টবি হেদে

মাইএসকিউএল এ বাছাই করা পিএইচপি এর চেয়ে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে বেঁচে থাকা মাপকাঠামো আছে না?
sdkfasldf

এটি নির্ভর করে, কখনও কখনও যখন আমরা স্ট্রোটাইম ব্যবহার না করতে চাই তখন এটি ব্যবহার করা ভাল। (php5.3 ডিপ)
আদম রামধন

আপনি প্রয়োজনে কেবল FROM_UNIXTIME ব্যবহার করে লজিকটি মাইএসকিএলে ঠেলাতে পারেন
ইনারিলো

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

17

আমার অভিজ্ঞতা থেকে, আপনি যদি এমন কোনও তারিখের ক্ষেত্র চান যা সন্নিবেশ কেবল একবার ঘটে এবং আপনি নির্দিষ্ট ক্ষেত্রটিতে কোনও আপডেট বা অন্য কোনও পদক্ষেপ নিতে চান না, তারিখের সময় সহ যান ।

উদাহরণস্বরূপ, userএকটি রেজিস্ট্রেশন তারিখের ক্ষেত্র সহ একটি সারণী বিবেচনা করুন । সেই userটেবিলটিতে, আপনি যদি কোনও নির্দিষ্ট ব্যবহারকারীর সময় শেষ লগ ইন করতে চান তবে টাইমস্ট্যাম্পের একটি ক্ষেত্রটি নিয়ে যান টাইপের যাতে ক্ষেত্রটি আপডেট হয়।

আপনি যদি পিএইচপিএমআইএডমিন থেকে টেবিল তৈরি করে থাকেন তবে সারি আপডেট হওয়ার সাথে সাথে ডিফল্ট সেটিংস টাইমস্ট্যাম্প ক্ষেত্রটি আপডেট করে । যদি দায়ের করা আপনার টাইমস্ট্যাম্পটি সারি আপডেটের সাথে আপডেট না হয় তবে আপনি টাইমস্ট্যাম্প ক্ষেত্রটি স্বয়ংক্রিয়ভাবে আপডেট হওয়ার জন্য নিম্নলিখিত কোয়েরিটি ব্যবহার করতে পারেন ।

ALTER TABLE your_table
      MODIFY COLUMN ts_activity TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;

15

টাইমস্ট্যাম্পের ডেটা টাইপ করে তারিখ এবং সময়, তবে ইউটিসি ফর্ম্যাটে, ডেটটাইম হিসাবে বর্তমান টাইমজোন ফর্ম্যাটে নয়। এবং যখন আপনি ডেটা আনছেন, টাইমস্ট্যাম্প আবার এটিকে বর্তমান সময় অঞ্চল হিসাবে রূপান্তর করে।

সুতরাং ধরুন আপনি মার্কিন যুক্তরাষ্ট্রে রয়েছেন এবং আমেরিকার একটি সময় অঞ্চল রয়েছে এমন একটি সার্ভার থেকে ডেটা পাচ্ছেন। তারপরে আপনি মার্কিন সময় অঞ্চল অনুযায়ী তারিখ এবং সময় পাবেন। টাইমস্ট্যাম্প ডেটা টাইপ কলামটি সর্বদা স্বয়ংক্রিয়ভাবে আপডেট হয় যখন এর সারিটি আপডেট হয়ে যায়। সুতরাং কোনও নির্দিষ্ট সারির গতবার আপডেট করা হয়েছিল তা ট্র্যাক করা দরকারী।

আরও তথ্যের জন্য আপনি ব্লগ পোস্ট টাইমস্ট্যাম্প বনাম ডেটটাইম পড়তে পারেন ।


আপনি সর্বদা SET time_zone = '+0:00';(ইউটিসি এখানে) দিয়ে সেশন পর্যায়ে TIMESTAMPটাইমজোনটি সর্বদা সংজ্ঞায়িত করতে পারেন যে আপনি কী মানগুলি থেকে সেট / সেট করেন তা নিশ্চিত হতে এবং সার্ভার টাইমজোন ডিফল্টের উপর নির্ভর করে যা পরিবর্তন হতে পারে avoid
ডলমেন

14

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

আরেকটি বিষয় বিবেচনা করার মতো:

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


14

আমার ক্ষেত্রে, আমি ইউটিসিকে প্রতিটি কিছুর জন্য সময় অঞ্চল হিসাবে সেট করে রেখেছি: সিস্টেম, ডাটাবেস সার্ভার ইত্যাদি etc. আমার গ্রাহকের যদি অন্য সময় অঞ্চল প্রয়োজন হয় তবে আমি এটিকে অ্যাপটিতে কনফিগার করব।

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

প্লাস হিসাবে, অন্য টাইমজোন সহ সিস্টেমে ডাটাবেস স্থানান্তরিত হওয়ার ক্ষেত্রে, টাইমস্ট্যাম্পগুলি ব্যবহার করে আমি আরও আত্মবিশ্বাসী বোধ করব। মাঝের মধ্যে একটি গ্রীষ্ম সময় পরিবর্তনের সাথে দুটি মুহুর্তের মধ্যে পার্থক্যের গণনা করার সময় এবং 1 ঘন্টা বা তারও কম সময়ের নির্ভুলতার প্রয়োজন হলে সম্ভাব্য সমস্যাগুলি না বলে।

সুতরাং, সংক্ষেপে বলতে গেলে, আমি টাইমস্ট্যাম্পের এই সুবিধাগুলিকে গুরুত্ব দিই:

  • আন্তর্জাতিক (মাল্টি টাইম জোন) অ্যাপ্লিকেশনগুলিতে ব্যবহারের জন্য প্রস্তুত
  • সময় অঞ্চলগুলির মধ্যে সহজ স্থানান্তর
  • ডিফারেন্স গণনা করা বেশ সহজ (কেবলমাত্র দুটি টাইমস্ট্যাম্প বিয়োগ)
  • গ্রীষ্মের সময়কালের / তারিখগুলি নিয়ে কোনও উদ্বেগের দরকার নেই

এই সমস্ত কারণে, আমি ইউটিসি এবং টাইমস্ট্যাম্প ক্ষেত্রগুলি পছন্দ করি যেখানে উপযুক্ত ible এবং আমি মাথাব্যথা এড়ানো;)


2038, 2038 আসার সময় আপনার আবেদন সমর্থনকারী ব্যক্তির জন্য টাইমস্ট্যাম্প ডেটা মজাদার হবে। টিক টোক টিক টোক
উইলসন হক

টাইমস্ট্যাম্পের ধরণটি তখন কিছুটা বাড়ানো এবং সম্ভাব্য মানের দ্বিগুণ হতে পারে।
রজার ক্যাম্পেনের

আপনার তত্ত্বটি 'কিছুটা বাড়িয়ে' পরীক্ষা করুন এবং দেখুন আপনি সফলভাবে 1 ফেব্রুয়ারী 2038 সঞ্চয় করতে পারেন এবং মাইএসকিউএল দিয়ে এটি পুনরুদ্ধার করতে পারেন কিনা। দয়া করে আপনার টেবিলের সংজ্ঞাটি দেখুন, দয়া করে দেখুন। আপনি সম্ভবত 2038 সালের ফেব্রুয়ারিতে অনেক অসুখী অতীতের পরিচিতি পেতে চলেছেন
উইলসন হক ১৯

1
@ উইলসন হক আপনাকে যাইহোক 2038 এর অনেক আগে মাইএসকিউএল সংস্করণ আপগ্রেড করতে হবে। এবং সেই প্রসারিত TIMESTAMP স্থানান্তর দ্বারা পরিচালিত হবে। এছাড়াও, বন্ধকগুলি পরিচালনা করার পাশাপাশি কয়েকটি অ্যাপ্লিকেশনগুলির এখনই 2038 এর যত্ন নেওয়া দরকার।
ডলম্যান

@ ডলম্যান প্রচুর পেশাদার-গ্রেড সরঞ্জাম এবং উপকরণের 20+ বছরের ওয়্যারেন্টি রয়েছে। সুতরাং এর মতো কিছু warranties.expires_atআজ মাইএসকিউএল টাইমস্ট্যাম্প হতে পারে না।
alexw

13

আপনি যখন কোনও টেবিলে আপডেট আপডেটের বিবরণটি করেন তখন টাইমস্ট্যাম্প পরিবর্তনের বিষয়ে সাবধান থাকুন। আপনার যদি কলামে 'নাম' (বারচর), 'বয়স' (প্রাক্তন), এবং 'তারিখ_যোজক' (টাইমস্ট্যাম্প) সহ একটি টেবিল থাকে এবং আপনি নিম্নলিখিত ডিএমএল বিবৃতিটি চালান

UPDATE table
SET age = 30

তারপরে আপনার 'তারিখ_যোজিত' কলামের প্রতিটি মান বর্তমান টাইমস্ট্যাম্পে পরিবর্তিত হবে।


3
আপনি কীভাবে আপনার টেবিলটি সেটআপ করেন তার উপর ভিত্তি করে আপনি এই আচরণটি নিয়ন্ত্রণ করতে পারেন। তাকান dev.mysql.com/doc/refman/5.5/en/timestamp-initialization.html
চার্লস Faiga

5
@ চারলেসফাইগা যখন অন্য কোনও কলাম আপডেট করা হয় তখন আপডেট করার জন্য টাইমস্ট্যাম্পের জন্য ডিফল্ট আচরণ হয়। আপনি যদি টাইমস্ট্যাম্পটির আসল মান ধরে রাখতে চান তবে আপনাকে স্পষ্টভাবে এটি বন্ধ করতে হবে
লয়েড ব্যাংকস

এটা কি ?! আপনাকে অবশ্যই টাইমস্ট্যাম্প কলামটি সেট করতে হবেON UPDATE CURRENT_TIMESTAMP
অ্যাকাউন্ট্যান্ট

এটি এমন একটি বৈশিষ্ট্য যা আপনি টেবিলটি তৈরি করার সময় স্পষ্টভাবে সক্ষম করতে হবে।
ডলমেন

13

এই নিবন্ধ থেকে রেফারেন্স নেওয়া:

প্রধান পার্থক্য:

TIMESTAMP রেকর্ডে পরিবর্তনগুলি ট্র্যাক করতে ব্যবহৃত হত এবং রেকর্ডটি পরিবর্তিত হয়ে গেলে প্রতিবার আপডেট হয়। DATETIME নির্দিষ্ট এবং স্ট্যাটিক মান সঞ্চয় করতে ব্যবহৃত যা রেকর্ডের কোনও পরিবর্তন দ্বারা প্রভাবিত হয় না।

TIMESTAMP এছাড়াও বিভিন্ন TIME ZONE সম্পর্কিত সেটিং দ্বারা প্রভাবিত। DATETIME ধ্রুবক।

TIMESTAMP সংগ্রহের জন্য অভ্যন্তরীণভাবে বর্তমান সময় অঞ্চলটিকে ইউটিসিতে রূপান্তরিত করে এবং পুনরুদ্ধারের সময় বর্তমান সময় জোনে রূপান্তরিত হয়। DATETIME এটি করতে পারে না।

টাইমস্ট্যাম্প সমর্থিত ব্যাপ্তি: '1970-01-01 00:00:01 ′ ইউটিসি থেকে' 2038-01-19 03:14:07 ′ ইউটিসি ডেটটাইম সমর্থিত পরিসীমা: '1000-01-01 00:00:00 ′ থেকে' 9999 -12-31 23:59:59 ′


11
+---------------------------------------------------------------------------------------+--------------------------------------------------------------------------+
|                                       TIMESTAMP                                       |                                 DATETIME                                 |
+---------------------------------------------------------------------------------------+--------------------------------------------------------------------------+
| TIMESTAMP requires 4 bytes.                                                           | DATETIME requires 8 bytes.                                               |
| Timestamp is the number of seconds that have elapsed since January 1, 1970 00:00 UTC. | DATETIME is a text displays 'YYYY-MM-DD HH:MM:SS' format.                |
| TIMESTAMP supported range: 1970-01-01 00:00:01 UTC to 2038-01-19 03:14:07 UTC.    | DATETIME supported range: 1000-01-01 00:00:00 to 9999-12-31 23:59:59 |
| TIMESTAMP during retrieval converted back to the current time zone.                   | DATETIME can not do this.                                                |
| TIMESTAMP is used mostly for metadata i.e. row created/modified and audit purpose.    | DATETIME is used mostly for user-data.                                   |
+---------------------------------------------------------------------------------------+--------------------------------------------------------------------------+

10

টাইমস্ট্যাম্প এবং ডেটটাইমের মধ্যে আরেকটি পার্থক্য টাইমস্ট্যাম্পে আপনি NUL এর ডিফল্ট মান করতে পারবেন না।


8
এটা স্পষ্টতই ভুল। এখানে একটি উদাহরণ রয়েছে: CREATE TABLE t2 ( ts1 TIMESTAMP NULL, ts2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP); প্রথম কলামটি নুল মান গ্রহণ করতে পারে।
অরমুজ

10

অপ্রয়োজনীয় ট্রিগার ব্যবহার না করে বর্তমান সময়ের উপর ভিত্তি করে নিজেকে টাইমস্ট্যাম্পের স্বয়ংক্রিয় আপডেট করার ক্ষমতাতে আমি অসমর্থিত কার্যকারিতা পেয়েছি। যদিও এটি কেবল আমারই, যদিও টাইমস্ট্যাম্পটি ইউটিসি যেমন বলা হয়েছিল।

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


9

প্রধান পার্থক্য হয়

  • টাইমস্ট্যাম্পে একটি আইএনডিএক্স - কাজ করে
  • ডেটটাইম এ একটি আইএনডিএক্স - কাজ করে না

ডেটটাইম ইনডেক্সিংয়ের সমস্যাগুলি দেখতে এই পোস্টটি দেখুন


6
উভয়ই একই সমস্যা রয়েছে যদি আপনি কলাম মানের উপর ভিত্তি করে কোনও ফাংশন নির্বাচন করছেন, এবং উভয়ই সূচিযুক্ত হতে পারে।
মার্কাস অ্যাডামস

4
সূচি টাইমস্ট্যাম্পে কাজ করে এবং ডেটটাইমে কাজ করে না? আপনি এই পোস্টগুলি থেকে ভুল সিদ্ধান্ত নিয়েছেন।
সালমান এ

9

datetimeসময় অঞ্চল সম্পর্কিত অনেক সমস্যা এবং বাগের মুখোমুখি হওয়ার পরে আমি আমার অ্যাপ্লিকেশনগুলিতে ব্যবহার বন্ধ করে দিয়েছি। এই প্রোগ্রামটিতে ব্যবহার timestampবেশী ভালো datetimeবেশিরভাগ ক্ষেত্রে

আপনি যখন জিজ্ঞাসা সময় কি? এবং উত্তরটি '2019-02-05 21:18:30' এর মতো কিছু হিসাবে আসে, এটি সম্পূর্ণ হয় না, সংজ্ঞায়িত উত্তর দেয় না কারণ এটির আরও একটি অংশ থাকে না, কোন টাইমজোন? ওয়াশিংটন? মস্কো? বেইজিং?

টাইমজোন ছাড়াই ডেটটাইম ব্যবহার করার অর্থ আপনার অ্যাপ্লিকেশনটি কেবলমাত্র 1 টি টাইমজোন নিয়ে কাজ করছে তবে টাইমস্ট্যাম্পগুলি আপনাকে এর সুবিধা দেয় datetime বিভিন্ন টাইমজোনগুলিতে একই সময়ে একই সঠিক পয়েন্টটি দেখানোর নমনীয়তার দেয়।

এখানে এমন কিছু কেস রয়েছে যা আপনাকে ব্যবহার করে অনুশোচনা করবে datetimeএবং কামনা করবে যে আপনি আপনার ডেটা টাইমস্ট্যাম্পগুলিতে সঞ্চয় করেছেন।

  1. আপনার ক্লায়েন্টদের সান্ত্বনার জন্য আপনি তাদের পছন্দের সময় অঞ্চলগুলির উপর ভিত্তি করে গণিত না করে তাদের সময় প্রদর্শন করতে চান এবং সময়টিকে তাদের অর্থবহ সময়সীমায় রূপান্তর করতে চান। আপনার যা যা প্রয়োজন তা হ'ল সময় অঞ্চল পরিবর্তন করা এবং আপনার সমস্ত অ্যাপ্লিকেশন কোড একই হবে। (আসলে আপনার আবেদনের শুরুতে সময় অঞ্চল নির্ধারণ করা উচিত, বা পিএইচপি অ্যাপ্লিকেশনগুলির ক্ষেত্রে প্রক্রিয়াজাতকরণের জন্য অনুরোধ করা উচিত)

    SET time_zone = '+2:00';
  2. আপনি যে দেশে রয়েছেন সেই দেশটি আপনি পরিবর্তন করেছেন এবং ডেটাটিকে আলাদা টাইমজোন (প্রকৃত ডেটা পরিবর্তন না করে) দেখার সময় আপনার বজায় রাখার কাজ চালিয়ে যান।

  3. আপনি বিশ্বজুড়ে বিভিন্ন ক্লায়েন্টের ডেটা গ্রহণ করেন, প্রত্যেকে তার টাইমজোনটিতে সময় সন্নিবেশ করে।

সংক্ষেপে

datetime = অ্যাপ্লিকেশনটি 1 টাইমজোনকে সমর্থন করে (সন্নিবেশ এবং নির্বাচন উভয়ের জন্য)

timestamp = অ্যাপ্লিকেশন যে কোনও টাইমজোনকে সমর্থন করে (সন্নিবেশ এবং নির্বাচন উভয়ের জন্য)


এই উত্তরটি সময় অঞ্চলগুলির ক্ষেত্রে নমনীয়তা এবং টাইমস্ট্যাম্পগুলির স্বাচ্ছন্দ্যে কিছু আলোকপাত করার জন্য, এটি কলামের আকার বা ব্যাপ্তি বা ভগ্নাংশের মতো অন্য কোনও পার্থক্য covering েকে রাখে না


যদি ক্ষেত্রগুলি ব্যবহার করে dateএবং অন্য ক্ষেত্রগুলি timestampএক টেবিলের মধ্যে ব্যবহার করে তবে। আমি মনে করি এটি একটি নতুন সমস্যার কারণ হবে কারণ যে ডেটা দ্বারা ফিল্টার করা whereহয় তা টাইমজোন পরিবর্তনের সাথে নয়।
এরলং পি

@ এরলংপি সেক্ষেত্রে আপনার অ্যাপ্লিকেশনটির dateক্যোয়ারী প্রেরণের আগে কলামে টাইমজোন সমস্যাটি ঠিক করা উচিত ।
হিসাবরক্ষক

7

আমি টাইমস্ট্যাম্পটি ব্যবহার করতে পছন্দ করি তাই সবকিছুকে একটি সাধারণ কাঁচা বিন্যাসে রাখতে এবং পিএইচপি কোডে বা আপনার এসকিউএল কোয়েরিতে ডেটা ফর্ম্যাট করতে। এমন কিছু উদাহরণ রয়েছে যেখানে আপনার কোডটি কার্যকর হয়ে সেকেন্ডে সমস্ত কিছু রেখে দেয়।



6

আমি একটি ইউনিক্স টাইমস্ট্যাম্প পছন্দ করি, কারণ আপনি সংখ্যায় রূপান্তর করতে পারেন এবং কেবল সংখ্যাটি নিয়ে চিন্তা করতে পারেন। এছাড়াও আপনি যোগ / বিয়োগ এবং সময়সীমা ইত্যাদি পান, তারপরে ফলাফলটি যে কোনও বিন্যাসে রূপান্তর করুন। এই কোডটি ডকুমেন্ট থেকে টাইমস্ট্যাম্প এবং বর্তমান সময়ের মধ্যে কত মিনিট সময় পার করেছে তা সন্ধান করে।

$date  = $item['pubdate']; (etc ...)
$unix_now = time();
$result = strtotime($date, $unix_now);
$unix_diff_min = (($unix_now  - $result) / 60);
$min = round($unix_diff_min);

4
অথবা, একটি মানব পাঠযোগ্য এবং নেটিভ মাইএসকিউএল ডেটটাইম ব্যবহার করুন এবং তারিখের সময় যুক্ত / সংযোজন করতে দেশীয় মাইএসকিউএল ফাংশনগুলি ব্যবহার করুন।
জুলিয়ান পালার্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.