আপনি কি ডেটটাইম বা টাইমস্ট্যাম্প ক্ষেত্রটি ব্যবহার করার পরামর্শ দিচ্ছেন এবং কেন (মাইএসকিউএল ব্যবহার করছেন)?
আমি সার্ভার সাইডে পিএইচপি দিয়ে কাজ করছি।
আপনি কি ডেটটাইম বা টাইমস্ট্যাম্প ক্ষেত্রটি ব্যবহার করার পরামর্শ দিচ্ছেন এবং কেন (মাইএসকিউএল ব্যবহার করছেন)?
আমি সার্ভার সাইডে পিএইচপি দিয়ে কাজ করছি।
উত্তর:
মাইএসকিউএল-তে টাইমস্ট্যাম্পগুলি সাধারণত রেকর্ডে পরিবর্তনগুলি ট্র্যাক করতে ব্যবহৃত হয় এবং প্রতিবার রেকর্ডটি পরিবর্তিত হওয়ার সাথে সাথে আপডেট করা হয়। আপনি যদি একটি নির্দিষ্ট মান সঞ্চয় করতে চান তবে আপনার একটি ডেটটাইম ক্ষেত্র ব্যবহার করা উচিত।
যদি আপনি বোঝাতে চেয়েছিলেন যে আপনি ইউনিক্স টাইমস্ট্যাম্প বা নেটিভ মাইএসকিউএল ডেটটাইম ফিল্ডটি ব্যবহার করার মধ্যে সিদ্ধান্ত নিতে চান তবে নেটিভ ফর্ম্যাটটি নিয়ে যান। আপনি এইভাবে মাইএসকিউএল এর মধ্যে গণনা করতে পারেন
("SELECT DATE_ADD(my_datetime, INTERVAL 1 DAY)")
এবং ("SELECT UNIX_TIMESTAMP(my_datetime)")
আপনি যখন পিএইচপি দিয়ে এটি পরিচালনা করতে চান তবে রেকর্ডটি জিজ্ঞাসা করার সময় মানের বিন্যাসটিকে ইউনিক্স টাইমস্ট্যাম্পে পরিবর্তন করা সহজ ।
DATETIME
একটি তারিখ (যেমনটি একটি ক্যালেন্ডারে পাওয়া যায়) এবং একটি সময় (যেমন একটি দেয়ালের ঘড়িতে লক্ষ্য করা যায়) TIMESTAMP
উপস্থাপন করা হয় , তবে সময়ে একটি নির্দিষ্ট সংজ্ঞাযুক্ত পয়েন্ট উপস্থাপন করে। আপনার অ্যাপ্লিকেশন সময় অঞ্চল পরিচালনা করে তবে এটি খুব গুরুত্বপূর্ণ হতে পারে। '2010-09-01 16:31:00' কত আগে ছিল? আপনি কোন টাইম জোনে রয়েছেন তার উপর এটি নির্ভর করে me আমার জন্য এটি কয়েক সেকেন্ড আগে ছিল, আপনার জন্য এটি ভবিষ্যতে কোনও সময়ের প্রতিনিধিত্ব করতে পারে। যদি আমি '1970-01-01 00:00:00 ইউটিসি' এর পরে 1283351460 সেকেন্ড বলি, আপনি ঠিক কী পয়েন্ট নিয়ে কথা বলবেন তা আপনি জানেন। (নীচের নীড় এর চমৎকার উত্তর দেখুন)। [ডাউনসাইড: বৈধ ব্যাপ্তি]।
মাইএসকিউএল 5 এবং তারপরে , টাইমস্ট্যাম্প মানগুলি বর্তমান সময়ের অঞ্চল থেকে সঞ্চয়স্থানের জন্য ইউটিসিতে রূপান্তরিত হয় এবং পুনরুদ্ধারের জন্য ইউটিসি থেকে বর্তমান সময় অঞ্চলে রূপান্তরিত হয়। (এই শুধুমাত্র TIMESTAMP এ ডাটা টাইপ জন্য হয় এবং না এমন DATETIME এ হিসাবে অন্যান্য ধরনের জন্য।)
ডিফল্টরূপে, প্রতিটি সংযোগের জন্য বর্তমান সময় অঞ্চলটি সার্ভারের সময়। মাইএসকিউএল সার্ভারের সময় অঞ্চল সমর্থন হিসাবে বর্ণিত হয়েছে প্রতি সংযোগ ভিত্তিতে সময় অঞ্চল নির্ধারণ করা যেতে পারে ।
আমি সর্বদা সারি মেটাডেটা (তারিখ তৈরি বা সংশোধিত) ব্যতীত অন্য কিছুর জন্য 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' ইউটিসি এর ব্যাপ্তি রয়েছে। মাইএসকিউএল সংস্করণ এবং সার্ভারটি যে এসকিউএল মোডে চলছে তার উপর নির্ভর করে এর বিভিন্ন বৈশিষ্ট্য রয়েছে।
আপনি সাধারণ ব্যবহারে টাইমস্ট্যাম্পগুলিতে নিম্ন সীমাটি হিট করার যথেষ্ট সম্ভাবনা রয়েছেন - যেমন জন্ম তারিখ সংরক্ষণ করা।
new Date().getTime()
ইতিমধ্যে আপনাকে একটি 64-বিট মান দেয়।
উদাহরণ নিচে কীভাবে 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 |
+---------------------+---------------------+
আমি আমার উত্তরটিকে নিবন্ধে রূপান্তরিত করেছি যাতে আরও বেশি লোক এই দরকারী, মাইএসকিউএল: ডেটটাইম ভার্সাস টাইমস্ট্যাম্প ডেটা টাইপগুলি খুঁজে পেতে পারে ।
DATETIME
সময়-অঞ্চল পরিবর্তনের সাথে কার্যকরী সময় পরিবর্তিত হয়েছিল, পরিবর্তিত TIMESTAMP
হয়নি তবে মানুষের প্রতিনিধিত্ব হয়েছে।
set time_zone="america/new_york"
;
মূল পার্থক্য হ'ল DATETIME স্থির থাকে যখন TIMESTAMP time_zone
সেটিংস দ্বারা প্রভাবিত হয় ।
সুতরাং এটি কেবল তখনই গুরুত্বপূর্ণ যখন আপনার কাছে - বা ভবিষ্যতে থাকতে পারে - সময় অঞ্চলগুলি জুড়ে সিঙ্ক্রোনাইজ করা ক্লাস্টারগুলি।
সহজ কথায়: যদি অস্ট্রেলিয়ায় আমার কাছে একটি ডাটাবেস থাকে এবং আমেরিকাতে একটি ডাটাবেস সিঙ্ক্রোনাইজ / পপুলেট করার জন্য সেই ডাটাবেসটির একটি ডাম্প নিয়ে যায়, তবে টাইমস্ট্যাম্প নতুন সময় অঞ্চলে ইভেন্টের আসল সময়টি প্রতিফলিত করার জন্য আপডেট করবে, যখন ডেটটাইম তবুও এউ টাইম জোনে ইভেন্টের সময় প্রতিফলিত করে ।
DATETIME ব্যবহারের একটি দুর্দান্ত উদাহরণ যেখানে TIMESTAMP ব্যবহার করা উচিত ছিল তা হ'ল ফেসবুকে, যেখানে তাদের সার্ভারগুলি কখনই পুরো অঞ্চল জুড়ে কী টাইম স্টাফ ঘটেছিল তা কখনই পুরোপুরি নিশ্চিত হয় না। একবার আমি একটি কথোপকথন করছিলাম যাতে সময়টি বলেছিল যে বার্তাটি আসলে পাঠানোর আগে আমি বার্তাগুলির জবাব দিচ্ছি। (এটি অবশ্যই বার্তাগুলি সফ্টওয়্যারটিতে খারাপ সময় অঞ্চল অনুবাদ করার কারণে ঘটতে পারে যদি সময়গুলি সমন্বয় করার পরিবর্তে পোস্ট করা হত))
আমি এই সিদ্ধান্তটি একটি অর্থপূর্ণ বেসে নিয়েছি।
যখন সময়টিতে (কম বা কম) নির্দিষ্ট পয়েন্ট রেকর্ড করা দরকার তখন আমি একটি টাইমস্ট্যাম্প ব্যবহার করি। উদাহরণস্বরূপ, যখন কোনও রেকর্ডটি ডাটাবেজে প্রবেশ করানো হয়েছিল বা যখন কোনও ব্যবহারকারীর ক্রিয়া হয়েছিল।
আমি তারিখের সময় ক্ষেত্রটি ব্যবহার করি যখন তারিখ / সময় সেট করা যায় এবং নির্বিচারে পরিবর্তন করা যায়। উদাহরণস্বরূপ যখন কোনও ব্যবহারকারী পরে অ্যাপয়েন্টমেন্টগুলি পরিবর্তন করতে পারেন।
আমি একটি DATETIME বা একটি TIMESTAMP ক্ষেত্র ব্যবহার করার পরামর্শ দিই না । আপনি যদি কোনও নির্দিষ্ট দিনটিকে পুরো হিসাবে (জন্মদিনের মতো) উপস্থাপন করতে চান তবে একটি তারিখের ধরণটি ব্যবহার করুন তবে আপনি যদি তার থেকে আরও নির্দিষ্ট হয়ে থাকেন তবে সম্ভবত আপনি কোনও ইউনিটের বিপরীতে একটি আসল মুহুর্ত রেকর্ড করতে আগ্রহী সময় (দিন, সপ্তাহ, মাস, বছর) একটি ডেটটাইম বা টাইমস্ট্যাম্প ব্যবহার না করে, একটি বিগিন্ট ব্যবহার করুন এবং মহাকাশ (সিস্টেমের কর্নারটাইমমিলিস () আপনি জাভা ব্যবহার করছেন) থেকে মিলসেকেন্ডের সংখ্যাটি সহজেই সংরক্ষণ করুন। এর বিভিন্ন সুবিধা রয়েছে:
এই সমস্যাটি নিবিড়ভাবে সম্পর্কিত যা আপনার কীভাবে কোনও ডাটাবেসে অর্থের মূল্য (অর্থাত্ 1.99 ডলার) সঞ্চয় করা উচিত। আপনার কি দশমিক, বা ডাটাবেসের অর্থের ধরণের ব্যবহার করা উচিত, বা সবচেয়ে খারাপের দ্বিগুণ? উপরে উল্লিখিত একই কারণে অনেকগুলির জন্য এই বিকল্পগুলির মধ্যে 3 টিই ভয়ঙ্কর। সমাধানটি হ'ল বিগিনটিটি ব্যবহার করে সেন্টগুলিতে অর্থের মূল্য সঞ্চয় করা এবং তারপরে আপনি যখন ব্যবহারকারীর কাছে মূল্য প্রদর্শন করেন তখন সেন্টগুলিকে ডলারে রূপান্তর করা। ডাটাবেসের কাজ হ'ল ডেটা সংরক্ষণ করা এবং সেই ডেটাটির ব্যাখ্যা দেওয়া না। এই সমস্ত অভিনব ডেটা-টাইপগুলি যা আপনি ডাটাবেজে দেখেন (বিশেষত ওরাকল) অল্প যোগ করে এবং আপনাকে বিক্রেতাকে লক-ইন করার রাস্তা দিয়ে শুরু করে।
TIMESTAMP 4 বাইট Vs 8 বাইট DATETIME এর জন্য।
http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html
তবে স্ক্রোনাইড যেমন বলেছিল এটির বছরের কম সীমাবদ্ধতা আছে 1970। ভবিষ্যতে ঘটতে পারে এমন যে কোনও কিছুর জন্য এটি দুর্দান্ত;)
TIMESTAMP চারটি বাইট বনাম আট বাইট DATETIME এর জন্য।
টাইমস্ট্যাম্পগুলি ডাটাবেসের উপরেও হালকা এবং দ্রুত সূচকযুক্ত।
আপনার যখন তারিখ এবং সময় উভয় তথ্য ধারণ করে এমন মানগুলির প্রয়োজন হয় তখন 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 ′ ইউটিসি এর ব্যাপ্তি রয়েছে। মাইএসকিউএল সংস্করণ এবং সার্ভারটি যে এসকিউএল মোডে চলছে তার উপর নির্ভর করে এর বিভিন্ন বৈশিষ্ট্য রয়েছে।
প্রয়োগের উপর নির্ভর করে, সত্যই।
সঙ্ঘাইয়ের অ্যাপয়েন্টমেন্টের জন্য নিউ ইয়র্কের একটি সার্ভারে কোনও ব্যবহারকারী দ্বারা টাইমস্ট্যাম্প স্থাপনের বিষয়টি বিবেচনা করুন। এখন যখন ব্যবহারকারী সাংহাইতে সংযুক্ত হন, তিনি টোকিওতে মিরর সার্ভার থেকে একই অ্যাপয়েন্টমেন্ট টাইমস্ট্যাম্পটি অ্যাক্সেস করেন। তিনি টোকিও সময়ে অ্যাপয়েন্টমেন্টটি দেখতে পাবে, নিউ ইয়র্ক সময় থেকে অফসেটে।
সুতরাং একটি মান বা সময়সূচির মতো ব্যবহারকারীর সময়কে উপস্থাপন করে এমন মানগুলির জন্য, তারিখের সময়টি আরও ভাল। এটি সার্ভার সেটিংস নির্বিশেষে ব্যবহারকারীকে পছন্দসই তারিখ এবং সময় নিয়ন্ত্রণ করতে দেয়। সেট সময়টি সেট সময়, সার্ভারের সময় অঞ্চল, ব্যবহারকারীর সময় অঞ্চল দ্বারা প্রভাবিত হয় না বা দিবালোক সঞ্চয় সময় গণনা করার পদ্ধতিতে পরিবর্তিত হয় (হ্যাঁ এটি পরিবর্তিত হয়)।
অন্যদিকে, মূল্য পরিশোধের লেনদেন, সারণী পরিবর্তন বা লগিংয়ের মতো সিস্টেম সময়কে উপস্থাপন করে এমন মানগুলির জন্য, সর্বদা টাইমস্ট্যাম্প ব্যবহার করুন। সার্ভারকে অন্য টাইম জোনে স্থানান্তরিত করার মাধ্যমে, বা বিভিন্ন সময় অঞ্চলে সার্ভারের মধ্যে তুলনা করার মাধ্যমে সিস্টেমটি প্রভাবিত হবে না।
টাইমস্ট্যাম্পগুলি ডাটাবেসের উপরেও হালকা এবং দ্রুত সূচকযুক্ত।
সাম্প্রতিক যে কোনও সামনের ফ্রেমওয়ার্ক (কৌণিক ১/২, প্রতিক্রিয়া, ভ্যু, ...) আপনার ইউটিসি ডেটটাইমটিকে স্থানীয় সময়ে রূপান্তর করতে পারে।
উপরন্তু:
(যদি না আপনি আপনার সার্ভারের টাইমজোন পরিবর্তন করতে পারেন)
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
SET time_zone = '+0:00';
জন্য।
একটি timestamp
ক্ষেত্র একটি বিশেষ ক্ষেত্রে দেখা যায় datetime
ক্ষেত্র। আপনি timestamp
বিশেষ বৈশিষ্ট্য পেতে কলাম তৈরি করতে পারেন; এটি তৈরি এবং / অথবা আপডেটে হয় নিজেকে আপডেট করার জন্য সেট করা যেতে পারে।
"বৃহত্তর" ডাটাবেসের শর্তে timestamp
এটিতে বেশ কয়েকটি বিশেষ-মামলার ট্রিগার রয়েছে trig
সঠিকটি যা হয় তা সম্পূর্ণরূপে আপনি কী করতে চান তার উপর নির্ভর করে।
টাইমস্ট্যাম্প সর্বদা ইউটিসি-তে থাকে (এটি ইউটিসি-তে 1970-01-01 সাল থেকে বিভক্ত সেকেন্ড) এবং আপনার মাইএসকিউএল সার্ভারটি সংযোগের সময়সীমার জন্য তারিখ / সময়কে স্বয়ংক্রিয়ভাবে রূপান্তর করে। দীর্ঘমেয়াদে, TIMESTAMP যাওয়ার উপায় কারণ আপনি জানেন যে আপনার অস্থায়ী ডেটা সর্বদা ইউটিসিতে থাকবে। উদাহরণস্বরূপ, আপনি অন্য সার্ভারে মাইগ্রেট করতে বা আপনি যদি আপনার সার্ভারের টাইমজোন সেটিংস পরিবর্তন করেন তবে আপনি আপনার তারিখগুলি আপ করবেন না।
দ্রষ্টব্য: ডিফল্ট সংযোগ টাইমজোন হ'ল সার্ভারের সময় অঞ্চল, তবে এটি প্রতি সেশনে পরিবর্তিত হওয়া উচিত (দেখুন SET time_zone = ...
)।
DATETIME, TIMESTAMP এবং DATE এর মধ্যে তুলনা
এটা কি [। ফ্র্যাকশন]?
সূত্র:
মাইএসকিউএলে এটি লক্ষণীয় যে আপনি টেবিলের কলামগুলি তৈরি করার সময় আপনি নীচের লাইনের সাথে কিছু ব্যবহার করতে পারেন:
on update CURRENT_TIMESTAMP
এটি প্রতিটি সারণীতে সময় আপডেট করে আপনি একটি সারি পরিবর্তন করেন এবং কখনও কখনও সঞ্চিত সর্বশেষ সম্পাদনা তথ্যের জন্য খুব সহায়ক। এটি কেবল টাইমস্ট্যাম্পের সাথে কাজ করে, তবে ডেটটাইম নয়।
মাইএসকিউএল এবং পিএইচপি এর সাথে কাজ করার সময় আমি সর্বদা একটি ইউনিক্স টাইমস্ট্যাম্প ব্যবহার করতাম। পিএইচপি-তে ডিফল্ট তারিখ পদ্ধতি হওয়ার মূল কারণটি প্যারামিটার হিসাবে একটি টাইমস্ট্যাম্প ব্যবহার করে, তাই কোনও বিশদকরণের প্রয়োজন হবে না।
পিএইচপি-তে বর্তমান ইউনিক্স টাইমস্ট্যাম্পটি পেতে, কেবল time();
মাইএসকিউএল করুন এবং করুন SELECT UNIX_TIMESTAMP();
।
আমার অভিজ্ঞতা থেকে, আপনি যদি এমন কোনও তারিখের ক্ষেত্র চান যা সন্নিবেশ কেবল একবার ঘটে এবং আপনি নির্দিষ্ট ক্ষেত্রটিতে কোনও আপডেট বা অন্য কোনও পদক্ষেপ নিতে চান না, তারিখের সময় সহ যান ।
উদাহরণস্বরূপ, user
একটি রেজিস্ট্রেশন তারিখের ক্ষেত্র সহ একটি সারণী বিবেচনা করুন । সেই user
টেবিলটিতে, আপনি যদি কোনও নির্দিষ্ট ব্যবহারকারীর সময় শেষ লগ ইন করতে চান তবে টাইমস্ট্যাম্পের একটি ক্ষেত্রটি নিয়ে যান টাইপের যাতে ক্ষেত্রটি আপডেট হয়।
আপনি যদি পিএইচপিএমআইএডমিন থেকে টেবিল তৈরি করে থাকেন তবে সারি আপডেট হওয়ার সাথে সাথে ডিফল্ট সেটিংস টাইমস্ট্যাম্প ক্ষেত্রটি আপডেট করে । যদি দায়ের করা আপনার টাইমস্ট্যাম্পটি সারি আপডেটের সাথে আপডেট না হয় তবে আপনি টাইমস্ট্যাম্প ক্ষেত্রটি স্বয়ংক্রিয়ভাবে আপডেট হওয়ার জন্য নিম্নলিখিত কোয়েরিটি ব্যবহার করতে পারেন ।
ALTER TABLE your_table
MODIFY COLUMN ts_activity TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
টাইমস্ট্যাম্পের ডেটা টাইপ করে তারিখ এবং সময়, তবে ইউটিসি ফর্ম্যাটে, ডেটটাইম হিসাবে বর্তমান টাইমজোন ফর্ম্যাটে নয়। এবং যখন আপনি ডেটা আনছেন, টাইমস্ট্যাম্প আবার এটিকে বর্তমান সময় অঞ্চল হিসাবে রূপান্তর করে।
সুতরাং ধরুন আপনি মার্কিন যুক্তরাষ্ট্রে রয়েছেন এবং আমেরিকার একটি সময় অঞ্চল রয়েছে এমন একটি সার্ভার থেকে ডেটা পাচ্ছেন। তারপরে আপনি মার্কিন সময় অঞ্চল অনুযায়ী তারিখ এবং সময় পাবেন। টাইমস্ট্যাম্প ডেটা টাইপ কলামটি সর্বদা স্বয়ংক্রিয়ভাবে আপডেট হয় যখন এর সারিটি আপডেট হয়ে যায়। সুতরাং কোনও নির্দিষ্ট সারির গতবার আপডেট করা হয়েছিল তা ট্র্যাক করা দরকারী।
আরও তথ্যের জন্য আপনি ব্লগ পোস্ট টাইমস্ট্যাম্প বনাম ডেটটাইম পড়তে পারেন ।
SET time_zone = '+0:00';
(ইউটিসি এখানে) দিয়ে সেশন পর্যায়ে TIMESTAMP
টাইমজোনটি সর্বদা সংজ্ঞায়িত করতে পারেন যে আপনি কী মানগুলি থেকে সেট / সেট করেন তা নিশ্চিত হতে এবং সার্ভার টাইমজোন ডিফল্টের উপর নির্ভর করে যা পরিবর্তন হতে পারে avoid
আমি সর্বদা একটি ইউনিক্স টাইমস্ট্যাম্প ব্যবহার করি, অনেকগুলি ডেটটাইম তথ্যের সাথে লেনদেন করার সময় কেবল বিচক্ষণতা বজায় রাখতে, বিশেষত সময় অঞ্চলগুলির জন্য সামঞ্জস্য করার সময়, তারিখগুলি যোগ / বিয়োগ করে এবং এর মতো করে। টাইমস্ট্যাম্পগুলির সাথে তুলনা করার সময়, এটি টাইমজোনগুলির জটিল বিষয়গুলি বাদ দেয় এবং হালকা ওজনের গাণিতিক ব্যবহারের পরিবর্তে আপনাকে আপনার সার্ভারের সাইড প্রসেসিংয়ে (এটি অ্যাপ্লিকেশন কোড বা ডাটাবেস অনুসন্ধানগুলিই হোক না কেন) রিসোর্সগুলিকে বাঁচিয়ে রাখার অনুমতি দেয় এবং তারপরে ভারী তারিখ-সময় যোগ / বিয়োগ ফাংশন।
আরেকটি বিষয় বিবেচনা করার মতো:
আপনি যদি কোনও অ্যাপ্লিকেশন তৈরি করে থাকেন তবে আপনার ডেটা কীভাবে লাইনে ব্যবহার করতে হতে পারে তা আপনি কখনই জানেন না। যদি আপনি আপ না হয়ে থাকেন, বলুন, তৃতীয় পক্ষের এপিআই থেকে একগুচ্ছ আইটেম সেটে রেকর্ডগুলির তুলনা করুন, এবং বলুন, এগুলি কালানুক্রমিক ক্রমে রাখুন, আপনি খুশি হবেন আপনার সারিগুলির জন্য ইউনিক্স টাইমস্ট্যাম্পগুলি। এমনকি আপনি মাইএসকিউএল টাইমস্ট্যাম্প ব্যবহার করার সিদ্ধান্ত নিলেও, ইউনিক্স টাইমস্ট্যাম্পটিকে বীমা হিসাবে সঞ্চয় করুন।
আমার ক্ষেত্রে, আমি ইউটিসিকে প্রতিটি কিছুর জন্য সময় অঞ্চল হিসাবে সেট করে রেখেছি: সিস্টেম, ডাটাবেস সার্ভার ইত্যাদি etc. আমার গ্রাহকের যদি অন্য সময় অঞ্চল প্রয়োজন হয় তবে আমি এটিকে অ্যাপটিতে কনফিগার করব।
আমি প্রায় সবসময় ডেটটাইম ক্ষেত্রগুলির চেয়ে টাইমস্ট্যাম্প পছন্দ করি, কারণ টাইমস্ট্যাম্পগুলিতে অন্তর্ভুক্তভাবে টাইমজোন অন্তর্ভুক্ত থাকে। সুতরাং, যে মুহুর্তে বিভিন্ন সময় অঞ্চল থেকে ব্যবহারকারীদের কাছ থেকে অ্যাপটি অ্যাক্সেস করা হবে এবং আপনি তাদের স্থানীয় সময় অঞ্চলটিতে তারিখ এবং সময়গুলি দেখতে চান সেই মুহুর্তে, এই ক্ষেত্রের ধরণটি ডেটটাইম ক্ষেত্রগুলিতে ডেটা সংরক্ষণ করা হয় তার চেয়ে এটি করা বেশ সহজ করে তোলে ।
প্লাস হিসাবে, অন্য টাইমজোন সহ সিস্টেমে ডাটাবেস স্থানান্তরিত হওয়ার ক্ষেত্রে, টাইমস্ট্যাম্পগুলি ব্যবহার করে আমি আরও আত্মবিশ্বাসী বোধ করব। মাঝের মধ্যে একটি গ্রীষ্ম সময় পরিবর্তনের সাথে দুটি মুহুর্তের মধ্যে পার্থক্যের গণনা করার সময় এবং 1 ঘন্টা বা তারও কম সময়ের নির্ভুলতার প্রয়োজন হলে সম্ভাব্য সমস্যাগুলি না বলে।
সুতরাং, সংক্ষেপে বলতে গেলে, আমি টাইমস্ট্যাম্পের এই সুবিধাগুলিকে গুরুত্ব দিই:
এই সমস্ত কারণে, আমি ইউটিসি এবং টাইমস্ট্যাম্প ক্ষেত্রগুলি পছন্দ করি যেখানে উপযুক্ত ible এবং আমি মাথাব্যথা এড়ানো;)
warranties.expires_at
আজ মাইএসকিউএল টাইমস্ট্যাম্প হতে পারে না।
আপনি যখন কোনও টেবিলে আপডেট আপডেটের বিবরণটি করেন তখন টাইমস্ট্যাম্প পরিবর্তনের বিষয়ে সাবধান থাকুন। আপনার যদি কলামে 'নাম' (বারচর), 'বয়স' (প্রাক্তন), এবং 'তারিখ_যোজক' (টাইমস্ট্যাম্প) সহ একটি টেবিল থাকে এবং আপনি নিম্নলিখিত ডিএমএল বিবৃতিটি চালান
UPDATE table
SET age = 30
তারপরে আপনার 'তারিখ_যোজিত' কলামের প্রতিটি মান বর্তমান টাইমস্ট্যাম্পে পরিবর্তিত হবে।
ON UPDATE CURRENT_TIMESTAMP
এই নিবন্ধ থেকে রেফারেন্স নেওয়া:
প্রধান পার্থক্য:
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 ′
+---------------------------------------------------------------------------------------+--------------------------------------------------------------------------+
| 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. |
+---------------------------------------------------------------------------------------+--------------------------------------------------------------------------+
টাইমস্ট্যাম্প এবং ডেটটাইমের মধ্যে আরেকটি পার্থক্য টাইমস্ট্যাম্পে আপনি NUL এর ডিফল্ট মান করতে পারবেন না।
CREATE TABLE t2 ( ts1 TIMESTAMP NULL, ts2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);
প্রথম কলামটি নুল মান গ্রহণ করতে পারে।
অপ্রয়োজনীয় ট্রিগার ব্যবহার না করে বর্তমান সময়ের উপর ভিত্তি করে নিজেকে টাইমস্ট্যাম্পের স্বয়ংক্রিয় আপডেট করার ক্ষমতাতে আমি অসমর্থিত কার্যকারিতা পেয়েছি। যদিও এটি কেবল আমারই, যদিও টাইমস্ট্যাম্পটি ইউটিসি যেমন বলা হয়েছিল।
এটি বিভিন্ন সময় অঞ্চল জুড়ে ট্র্যাক রাখতে পারে, সুতরাং উদাহরণস্বরূপ আপনার যদি কোনও আপেক্ষিক সময় প্রদর্শনের প্রয়োজন হয়, ইউটিসি সময়টি আপনি চান তা।
প্রধান পার্থক্য হয়
datetime
সময় অঞ্চল সম্পর্কিত অনেক সমস্যা এবং বাগের মুখোমুখি হওয়ার পরে আমি আমার অ্যাপ্লিকেশনগুলিতে ব্যবহার বন্ধ করে দিয়েছি। এই প্রোগ্রামটিতে ব্যবহার timestamp
বেশী ভালো datetime
বেশিরভাগ ক্ষেত্রে ।
আপনি যখন জিজ্ঞাসা সময় কি? এবং উত্তরটি '2019-02-05 21:18:30' এর মতো কিছু হিসাবে আসে, এটি সম্পূর্ণ হয় না, সংজ্ঞায়িত উত্তর দেয় না কারণ এটির আরও একটি অংশ থাকে না, কোন টাইমজোন? ওয়াশিংটন? মস্কো? বেইজিং?
টাইমজোন ছাড়াই ডেটটাইম ব্যবহার করার অর্থ আপনার অ্যাপ্লিকেশনটি কেবলমাত্র 1 টি টাইমজোন নিয়ে কাজ করছে তবে টাইমস্ট্যাম্পগুলি আপনাকে এর সুবিধা দেয় datetime
বিভিন্ন টাইমজোনগুলিতে একই সময়ে একই সঠিক পয়েন্টটি দেখানোর নমনীয়তার দেয়।
এখানে এমন কিছু কেস রয়েছে যা আপনাকে ব্যবহার করে অনুশোচনা করবে datetime
এবং কামনা করবে যে আপনি আপনার ডেটা টাইমস্ট্যাম্পগুলিতে সঞ্চয় করেছেন।
আপনার ক্লায়েন্টদের সান্ত্বনার জন্য আপনি তাদের পছন্দের সময় অঞ্চলগুলির উপর ভিত্তি করে গণিত না করে তাদের সময় প্রদর্শন করতে চান এবং সময়টিকে তাদের অর্থবহ সময়সীমায় রূপান্তর করতে চান। আপনার যা যা প্রয়োজন তা হ'ল সময় অঞ্চল পরিবর্তন করা এবং আপনার সমস্ত অ্যাপ্লিকেশন কোড একই হবে। (আসলে আপনার আবেদনের শুরুতে সময় অঞ্চল নির্ধারণ করা উচিত, বা পিএইচপি অ্যাপ্লিকেশনগুলির ক্ষেত্রে প্রক্রিয়াজাতকরণের জন্য অনুরোধ করা উচিত)
SET time_zone = '+2:00';
আপনি যে দেশে রয়েছেন সেই দেশটি আপনি পরিবর্তন করেছেন এবং ডেটাটিকে আলাদা টাইমজোন (প্রকৃত ডেটা পরিবর্তন না করে) দেখার সময় আপনার বজায় রাখার কাজ চালিয়ে যান।
datetime
= অ্যাপ্লিকেশনটি 1 টাইমজোনকে সমর্থন করে (সন্নিবেশ এবং নির্বাচন উভয়ের জন্য)
timestamp
= অ্যাপ্লিকেশন যে কোনও টাইমজোনকে সমর্থন করে (সন্নিবেশ এবং নির্বাচন উভয়ের জন্য)
এই উত্তরটি সময় অঞ্চলগুলির ক্ষেত্রে নমনীয়তা এবং টাইমস্ট্যাম্পগুলির স্বাচ্ছন্দ্যে কিছু আলোকপাত করার জন্য, এটি কলামের আকার বা ব্যাপ্তি বা ভগ্নাংশের মতো অন্য কোনও পার্থক্য covering েকে রাখে না ।
date
এবং অন্য ক্ষেত্রগুলি timestamp
এক টেবিলের মধ্যে ব্যবহার করে তবে। আমি মনে করি এটি একটি নতুন সমস্যার কারণ হবে কারণ যে ডেটা দ্বারা ফিল্টার করা where
হয় তা টাইমজোন পরিবর্তনের সাথে নয়।
date
ক্যোয়ারী প্রেরণের আগে কলামে টাইমজোন সমস্যাটি ঠিক করা উচিত ।
একটি TIMESTAMP
, 4 বাইট প্রয়োজন যেহেতু একটি DATETIME
8 বাইট প্রয়োজন।
আমি একটি ইউনিক্স টাইমস্ট্যাম্প পছন্দ করি, কারণ আপনি সংখ্যায় রূপান্তর করতে পারেন এবং কেবল সংখ্যাটি নিয়ে চিন্তা করতে পারেন। এছাড়াও আপনি যোগ / বিয়োগ এবং সময়সীমা ইত্যাদি পান, তারপরে ফলাফলটি যে কোনও বিন্যাসে রূপান্তর করুন। এই কোডটি ডকুমেন্ট থেকে টাইমস্ট্যাম্প এবং বর্তমান সময়ের মধ্যে কত মিনিট সময় পার করেছে তা সন্ধান করে।
$date = $item['pubdate']; (etc ...)
$unix_now = time();
$result = strtotime($date, $unix_now);
$unix_diff_min = (($unix_now - $result) / 60);
$min = round($unix_diff_min);