डिफ़ॉल्ट रूप से, (कम से कम डेबियन-आधारित इंस्टॉलेशन पर) कोई भी समय क्षेत्र डेटा MySQL में लोड नहीं किया जाता है। यदि आप परीक्षण करना चाहते हैं कि क्या वे लोड हैं, तो निष्पादित करने का प्रयास करें:
SELECT CONVERT_TZ('2012-06-07 12:00:00', 'GMT', 'America/New_York');
अगर यह DATETIME
लौटाता है (इस मामले में 2012-06-07 08:00:00
), आपके पास समय क्षेत्र लोड हैं। अगर यह NULL
लौटाता है , वे नहीं हैं। लोड नहीं होने पर, आप ऑफ़सेट का उपयोग करके कनवर्ट करने तक सीमित हैं (उदा. +10:00
या -6:00
)।
यह कई मामलों में ठीक काम करना चाहिए, लेकिन ऐसे समय होते हैं जब नामित समय क्षेत्रों का उपयोग करना बेहतर होता है, जैसे डेलाइट सेविंग टाइम के बारे में चिंता न करना। निम्नलिखित कमांड को निष्पादित करने से सिस्टम से समय क्षेत्र डेटा लोड होता है (केवल यूनिक्स। मुझे यकीन नहीं है कि समकक्ष विंडोज कमांड क्या होगा):
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
यदि आपको लगातार MySQL समय क्षेत्रों पर भरोसा करने की आवश्यकता है, तो उपरोक्त आदेश हर बार सिस्टम समय क्षेत्र अद्यतन होने पर निष्पादित किया जाना चाहिए . आप इसे स्वचालित रूप से करने के लिए इसे साप्ताहिक या मासिक क्रॉन जॉब में भी जोड़ सकते हैं।
फिर, समय क्षेत्रों की सूची देखने के लिए, बस निम्न कार्य करें:
USE mysql;
SELECT * FROM `time_zone_name`;
ध्यान दें, MySQL में समय क्षेत्र की जानकारी में लगभग 5 एमबी का समय लगता है। यदि आप कभी भी टाइमज़ोन जानकारी को अनलोड करना चाहते हैं, तो बस निम्नलिखित को निष्पादित करें और MySQL को पुनरारंभ करें:
TRUNCATE `time_zone` ;
TRUNCATE `time_zone_leap_second` ;
TRUNCATE `time_zone_name` ;
TRUNCATE `time_zone_transition` ;
TRUNCATE `time_zone_transition_type` ;
DROP
ये टेबल या बुरी चीजें होंगी।
संपादित करें:
नीचे दी गई उपयोगकर्ता टिप्पणी के आधार पर, यदि आप सिस्टम को अपडेट करते समय टाइमज़ोन को स्वचालित रूप से अपडेट करना चाहते हैं, तो आपको पहले रूट को पासवर्ड के लिए संकेत दिए बिना लॉग इन करने की अनुमति देनी होगी।
MySQL>=5.6.6
निम्नलिखित [स्रोत निष्पादित करें ]:
mysql_config_editor set --login-path=client --host=localhost --user=root --password
MySQL <5.6.6
एक ~/.my.cnf
बनाएं फ़ाइल (यदि यह अभी तक मौजूद नहीं है) और निम्नलिखित जोड़ें:
[client]
user=root
password=yourMysqlRootPW
फिर निष्पादित करें chmod 600 ~/.my.cnf
यह सुनिश्चित करने के लिए कि कोई और इसे पढ़ न सके।
स्क्रिप्ट अपडेट करें
प्रति दिन एक बार निष्पादित करने के लिए निम्न स्क्रिप्ट को crontab में जोड़ें:
#!/bin/bash
# Find if there are any timezone files that have been modified in the last 24
# hours and do not have ".tab" in the name (since these are not timezone files)
if [ `find /usr/share/zoneinfo -mtime -1 | grep -v '\.tab' | wc -l` -gt 0 ]; then
echo "Updating MySQL timezone info"
# Note, suppressing STDERR here because of the .tab files above
# that cause warnings.
mysql_tzinfo_to_sql /usr/share/zoneinfo 2>/dev/null | mysql -u root mysql
echo "Done!\n"
fi
echo
निकालें यदि आप कोई आउटपुट नहीं चाहते हैं तो लाइनें।
नोट:यह (ज्यादातर) परीक्षण नहीं किया गया है। अगर आपको कोई समस्या है तो मुझे बताएं और मैं इस उत्तर को अपडेट कर दूंगा।