ম্যানুয়াল থেকে ( বিভাগ 9.6 ):
গ্লোবাল এবং ক্লায়েন্ট-নির্দিষ্ট সময় অঞ্চলগুলির বর্তমান মানগুলি এইভাবে পুনরুদ্ধার করা যেতে পারে:
mysql> SELECT @@global.time_zone, @@session.time_zone;
উপরের রিটার্নগুলি সম্পাদনা করুনSYSTEM
যদি মাইএসকিউএলটি সিস্টেমের টাইমজোনটিতে স্লেভ সেট করা থাকে যা সহায়ক থেকে কম less যেহেতু আপনি পিএইচপি ব্যবহার করছেন, যদি মাইএসকিউএল থেকে উত্তর হয় SYSTEM
, আপনি তারপরে সিস্টেমটিকে জিজ্ঞাসা করতে পারেন যে এটি কোন টাইমজোনটির মাধ্যমে ব্যবহার করছে date_default_timezone_get
। (অবশ্যই, ভোলকারক উল্লেখ করেছেন যে, পিএইচপি অন্য কোনও সার্ভারে চলতে পারে, তবে অনুমান হিসাবে, ওয়েব সার্ভার এবং যে ডিবি সার্ভারের সাথে এটি কথা বলছে সেট করা হয়েছে [যদি বাস্তবে না থাকে তবে একই টাইমজোনটি একটি নয়) বিশাল লিপ।) তবে সাবধান হন (মাইএসকিউএল হিসাবে), আপনি পিএইচপি যে টাইমজোনটি ব্যবহার করতে পারেন তা সেট করতে পারেন (date_default_timezone_set
), যার অর্থ এটি ওএস ব্যবহারের চেয়ে পৃথক মানের প্রতিবেদন করতে পারে। আপনি যদি পিএইচপি কোডের নিয়ন্ত্রণে থাকেন তবে আপনি এটি করছেন এবং ঠিক আছেন কিনা তা আপনার জানা উচিত।
তবে মাইএসকিউএল সার্ভারটি টাইমজোন কী টাইমজোন ব্যবহার করছে তার পুরো প্রশ্নটি একটি স্পর্শকাতর হতে পারে কারণ সার্ভারের টাইমজোনটি কোন টাইমজোনটিতে রয়েছে তা জিজ্ঞাসা করা আপনাকে ডাটাবেসের ডেটা সম্পর্কে একেবারে কিছুই বলে না । বিস্তারিত পড়ুন:
আরও আলোচনা :
আপনি যদি সার্ভারের নিয়ন্ত্রণে থাকেন তবে অবশ্যই আপনি তা নিশ্চিত করতে পারবেন যে সময় অঞ্চলটি একটি পরিচিত পরিমাণ। আপনি যদি সার্ভারের নিয়ন্ত্রণে না থাকেন তবে আপনি নিজের সংযোগের সাহায্যে টাইমজোনটি এভাবে সেট করতে পারেন :
set time_zone = '+00:00';
এটি GMT- র জন্য সময় অঞ্চল নির্ধারণ করে, যাতে পরবর্তী কোনও ক্রিয়াকলাপ (যেমন now()
) GMT ব্যবহার করে।
দ্রষ্টব্য, যদিও, সেই সময় এবং তারিখের মানগুলি মাইএসকিউএলে টাইমজোন তথ্যের সাথে সঞ্চয় করা হয় না :
mysql> create table foo (tstamp datetime) Engine=MyISAM;
Query OK, 0 rows affected (0.06 sec)
mysql> insert into foo (tstamp) values (now());
Query OK, 1 row affected (0.00 sec)
mysql> set time_zone = '+01:00';
Query OK, 0 rows affected (0.00 sec)
mysql> select tstamp from foo;
+---------------------+
| tstamp |
+---------------------+
| 2010-05-29 08:31:59 |
+---------------------+
1 row in set (0.00 sec)
mysql> set time_zone = '+02:00';
Query OK, 0 rows affected (0.00 sec)
mysql> select tstamp from foo;
+---------------------+
| tstamp |
+---------------------+
| 2010-05-29 08:31:59 | <== Note, no change!
+---------------------+
1 row in set (0.00 sec)
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2010-05-29 10:32:32 |
+---------------------+
1 row in set (0.00 sec)
mysql> set time_zone = '+00:00';
Query OK, 0 rows affected (0.00 sec)
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2010-05-29 08:32:38 | <== Note, it changed!
+---------------------+
1 row in set (0.00 sec)
সুতরাং সার্ভারের সময় অঞ্চল বুদ্ধিমান ডান এখন ফাংশন যে সময় পান পরিপ্রেক্ষিতে শুধুমাত্র গুরুত্বপূর্ণ, যেমন now()
, unix_timestamp()
ইত্যাদি .; এটি আপনাকে ডেটাবেস ডেটাতে টাইমজোন তারিখগুলি কী ব্যবহার করছে সে সম্পর্কে কিছুই জানায় না। আপনি ধরে নিতে পারেন যে সেগুলি সার্ভারের টাইমজোন ব্যবহার করে লেখা হয়েছিল তবে এই ধারণাটি ত্রুটিযুক্ত হতে পারে। ডেটাতে যে কোনও তারিখ বা সময় সঞ্চিত রয়েছে তার টাইমজোন জানতে আপনার অবশ্যই তা নিশ্চিত করতে হবে যে তারা টাইমজোন তথ্য সংরক্ষণ করেছে বা (যেমন আমি করি) তারা সর্বদা GMT এ আছেন তা নিশ্চিত করতে হবে।
সার্ভারের টাইমজোন ত্রুটিযুক্ত ব্যবহার করে ডেটা কেন লেখা হয়েছিল তা ধরে নিচ্ছেন? ঠিক আছে, একটি জিনিসের জন্য, ডেটাটি একটি সংযোগ ব্যবহার করে লিখিত হতে পারে যা একটি ভিন্ন টাইমজোন সেট করে। ডাটাবেসটি একটি সার্ভার থেকে অন্য সার্ভারে স্থানান্তরিত হতে পারে, যেখানে সার্ভারগুলি বিভিন্ন সময় অঞ্চলগুলিতে ছিল (যখন আমি টেক্সাস থেকে ক্যালিফোর্নিয়ায় চলে এসেছি এমন একটি ডেটাবেস উত্তরাধিকার সূত্রে পেয়েছিলাম)) কিন্তু এমনকি যদি ডাটা তার বর্তমান সময় জোনের সাথেই সার্ভারে লেখা আছে,, এটা এখনও দ্ব্যর্থক আছে। গত বছর, মার্কিন যুক্তরাষ্ট্রে, 1 নভেম্বর ভোর 2:00 টায় ডাইটলাইট সঞ্চয় সময় বন্ধ করা হয়েছিল। ধরুন আমার সার্ভার ক্যালিফোর্নিয়ায় প্যাসিফিক টাইমজোন ব্যবহার করছে এবং আমার মূল্য আছে2009-11-01 01:30:00
ডাটাবেসে এটি কথন ছিল? সে 1 নভেম্বর পিডিটি সকাল 1:30 ছিল, বা 1 নভেম্বর পিএসটি 1:30 পিএমটি (এক ঘন্টা পরে)? আপনার জানার কোনও উপায় নেই। নৈতিক: সর্বদা GMT- এ তারিখ / বার সঞ্চয় করুন (যা ডিএসটি করে না) এবং প্রয়োজনীয় সময় হিসাবে অঞ্চলটি রূপান্তর করুন।