আমি আমার উদ্দেশ্যে এটি খুঁজে পেয়েছি। আমি যা শিখেছি তার সংক্ষিপ্তসার করব (দুঃখিত, এই নোটগুলি ভার্ভোজ; এগুলি আমার ভবিষ্যতের রেফারেলের জন্য অন্য যে কোনও কিছুর মতো)।
আমি কি আমার আগের মন্তব্যের এক বলেন পক্ষান্তরে DATETIME এ এবং টাইমস্ট্যাম্প ক্ষেত্র না ভিন্নভাবে আচরণ। টাইমস্ট্যাম্প ক্ষেত্র (দস্তাবেজগুলি ইঙ্গিত হিসাবে) আপনি "YYYY-MM-DD hh: mm: ss" ফর্ম্যাটে যা কিছু প্রেরণ করেন তা নিয়ে যান এবং এটি আপনার বর্তমান টাইমজোন থেকে ইউটিসি সময়ে রূপান্তর করুন। বিপরীতটি স্বচ্ছভাবে ঘটে যখনই আপনি ডেটা পুনরুদ্ধার করবেন। DATETIME ক্ষেত্রগুলি এই রূপান্তর করে না। আপনি তাদের প্রেরিত যা কিছু তারা নেয় এবং কেবল এটি সরাসরি সঞ্চয় করে।
না DATETIME বা TIMESTAMP ক্ষেত্রের ধরণগুলি ডিএসটি পর্যবেক্ষণ করে এমন টাইমজোনে সঠিকভাবে ডেটা সঞ্চয় করতে পারে না । আপনি যদি "২০০৯-১১-০১ 01:30:00" সঞ্চয় করেন তবে ক্ষেত্রগুলিতে সকাল 1:30 টায় আপনি যে সংস্করণটি চেয়েছিলেন তার পার্থক্য করার কোনও উপায় নেই - -04: 00 বা -05: 00 সংস্করণ।
ঠিক আছে, সুতরাং আমাদের অবশ্যই আমাদের ডেটা একটি নন ডিএসটি টাইমজোন (যেমন ইউটিসি) তে সঞ্চয় করতে হবে। টাইমস্ট্যাম্প ক্ষেত্রগুলি এই কারণে সঠিকভাবে হ্যান্ডেল করতে অক্ষম আমি ব্যাখ্যা করব: আপনার সিস্টেমটি যদি কোনও ডিএসটি টাইমজোন সেট করা থাকে তবে আপনি যা টাইমস্ট্যাম্পে রেখেছিলেন তা আপনি ফিরে না পেয়ে যাবেন না। এমনকি আপনি যদি এটি ডেটা প্রেরণ করেন যা আপনি ইতিমধ্যে ইউটিসিতে রূপান্তর করেছেন, এটি এখনও আপনার স্থানীয় সময় অঞ্চলে ডেটা ধরে নেবে এবং ইউটিসি-তে আরও একটি রূপান্তর করবে। আপনার স্থানীয় সময় অঞ্চলটি যখন ডিএসটি পর্যবেক্ষণ করে তখন এই টাইমস্ট্যাম্প-প্রয়োগিত স্থানীয়-ইউটিসি-ব্যাক-টু-স্থানীয় রাউন্ডট্রিপটি ক্ষতিকারক হয় ("২০০৯-১০-১১ 01:30:00" থেকে 2 টি ভিন্ন সম্ভাব্য সময়ে মানচিত্র)।
DATETIME এর সাথে আপনি যে কোনও টাইম জোনে আপনার ডেটা সংরক্ষণ করতে পারেন এবং আত্মবিশ্বাসী হন যে আপনি যা যা প্রেরণ করবেন তা ফিরে পেয়ে যাবেন (টাইমস্ট্যাম্পের ক্ষেত্রগুলি আপনাকে ক্ষতিকারক রাউন্ডট্রিপ রূপান্তরগুলিতে বাধ্য করবে না)। সুতরাং সমাধানটি হ'ল একটি ডেটটাইম ফিল্ড ব্যবহার করা এবং ফিল্ডে সংরক্ষণের আগে আপনার সিস্টেমের সময় অঞ্চল থেকে নন-ডিএসটি জোনে যে কোনও কিছুতে এটি সংরক্ষণ করতে চান তা রূপান্তর করুন (আমার ধারণা ইউটিসি সম্ভবত সেরা বিকল্প)। এটি আপনাকে আপনার স্ক্রিপ্টিং ভাষায় রূপান্তর যুক্তিকে তৈরি করতে দেয় যাতে আপনি স্পষ্টভাবে ইউটিসি সমতুল্যভাবে "2009-11-01 01:30:00 -04: 00" বা "" 2009-11-01 01:30: 00 -05: 00 "।
আরেকটি গুরুত্বপূর্ণ বিষয় লক্ষণীয় হ'ল মাইএসকিউএলের তারিখ / সময় গণিত ফাংশনগুলি ডিএসটি সীমানার চারপাশে সঠিকভাবে কাজ করে না যদি আপনি নিজের তারিখগুলি ডিএসটি টিজেডে সংরক্ষণ করেন। সুতরাং ইউটিসিতে আরও সমস্ত কারণ সঞ্চয় করতে হবে।
সংক্ষেপে আমি এখন এটি করি:
ডাটাবেস থেকে ডেটা পুনরুদ্ধার করার সময়:
সঠিক ইউনিক্স টাইমস্ট্যাম্প পেতে মাইএসকিউএলের বাইরে ইউটিসি হিসাবে ডাটাবেস থেকে ডেটা স্পষ্টভাবে ব্যাখ্যা করুন interpret আমি পিএইচপি এর স্ট্রোটাইম () ফাংশন বা এর জন্য ডেটটাইম ক্লাস ব্যবহার করি। এটি মাইএসকিউএলের CONVERT_TZ () বা UNIX_TIMESTAMP () ফাংশনগুলি ব্যবহার করে মাইএসকিউএলের অভ্যন্তরে নির্ভরযোগ্যভাবে করা যায় না কারণ CONVERT_TZ কেবলমাত্র 'YYYY-MM-DD hh: mm: s' এর মান আউটপুট দেবে যা অস্পষ্টতার সমস্যায় ভুগছে এবং UNIX_TIMESTAMP () ধরে নেয় ইনপুটটি সিস্টেম টাইমজোনটিতে রয়েছে, টাইমজোনটি ডেটা আসলে (ইউটিসি) সঞ্চিত ছিল না।
ডাটাবেসে ডেটা সংরক্ষণ করার সময়:
আপনি আপনার তারিখটি মাইএসকিউএল এর বাইরে সুনির্দিষ্ট ইউটিসি সময়ে রূপান্তর করুন। উদাহরণস্বরূপ: পিএইচপি-র ডেটটাইম ক্লাসের সাহায্যে আপনি "২০০৯-১১-০১ 1:30:00 EST" "2009-11-01 1:30:00 EDT" থেকে আলাদাভাবে নির্দিষ্ট করতে পারেন, তারপরে এটি ইউটিসিতে রূপান্তর করুন এবং সঠিক ইউটিসি সময় সাশ্রয় করুন আপনার DATETIME ক্ষেত্রে।
ভাই। প্রত্যেকের ইনপুট এবং সাহায্যের জন্য অনেক ধন্যবাদ। আশা করি এটি অন্য কাউকে কিছুটা মাথা ব্যথা থেকে বাঁচাতে পারে।
বিটিডাব্লু, আমি এটি মাইএসকিউএল 5.0.22 এবং 5.0.27 এ দেখছি