Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL समय क्षेत्र

डिफ़ॉल्ट रूप से, (कम से कम डेबियन-आधारित इंस्टॉलेशन पर) कोई भी समय क्षेत्र डेटा 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 निकालें यदि आप कोई आउटपुट नहीं चाहते हैं तो लाइनें।

नोट:यह (ज्यादातर) परीक्षण नहीं किया गया है। अगर आपको कोई समस्या है तो मुझे बताएं और मैं इस उत्तर को अपडेट कर दूंगा।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL, MS SQL सर्वर, MySQL, और SQLite में शेष

  2. Oracle में DECODE फ़ंक्शन के MySQL समकक्ष

  3. MySQL में कॉलम के प्रतिशत की गणना कैसे करें

  4. PHP, mysql, jQuery और AJAX का उपयोग करके div स्क्रॉल पर गतिशील रूप से डेटा लोड करें

  5. पायथन कर्सर का उपयोग करके संग्रहीत कार्यविधि से परिणाम नहीं लौटा सकता