Convert_tz शून्य देता है


92

मुझे पता है कि यह मूर्खतापूर्ण लगता है, लेकिन जब मैं उपयोग करता हूं

SELECT CONVERT_TZ('2004-01-01 12:00:00','UTC','Asia/Jakarta') AS time

यह NULL को आउटपुट करता है। मैं Ubuntu 12.04 64 बिट में MySQL कार्यक्षेत्र का उपयोग कर रहा हूं, और यह मेरे अन्य लैपटॉप / ओएस (MySQL कार्यक्षेत्र का उपयोग करके) में भी काम करता है।

जवाबों:


174

यदि आपने समय क्षेत्र तालिका को mysql में लोड नहीं किया है तो यह होगा।

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql

1
क्या आपको केवल एक बार या हर बार MySql को शुरू करने की आवश्यकता है?
अबे मिसेलर

3
सिर्फ एक बार। यह जानकारी को MySQL में एक तालिका में लोड करता है, जिसका उपयोग तब से किया जाता है।
बरमार

2
आप किसी भी त्रुटि को चलाने के लिए बल ध्वज का उपयोग कर सकते हैं: mysql_tzinfo_to_sql / usr / share / zoneinfo | mysql -u root --force -p mysql
scum

3
इससे पहले कि यह (डेबियन पर) लागू होगा मुझे MySQL डेमॉन को फिर से शुरू करने की आवश्यकता थी।
एकस्टर

2
नमस्ते, जब मैं इस कमांड को चलाता हूं तो मुझे इस तरह त्रुटि मिली: चेतावनी: समय क्षेत्र के रूप में '/usr/share/zoneinfo/iso3166.tab' लोड करने में असमर्थ। इसे छोड़ देना। चेतावनी: समय क्षेत्र के रूप में '/usr/share/zoneinfo/zone.tab' लोड करने में असमर्थ। इसे छोड़ देना।
घनश्याम कटारिया

26

मुझे यह पता चला कि कुछ समय बिताने के बाद यह जानने की कोशिश कर रहा था कि स्वीकृत उत्तर में कमांड चलाने के बाद (जो MySQL के देव साइट पर भी ऐसा ही है) कमांड टाइमज़ोन के बीच परिवर्तित करने में असमर्थ था जैसे

SELECT CONVERT_TZ('2004-01-01 12:00:00','UTC','MET') AS time

यह पता चला है कि ओएस एक्स पर दो फाइलें हैं जो समस्याओं का कारण बनती हैं: /usr/share/zoneinfo/Factoryऔर /usr/share/zoneinfo/+VERSION

फिक्स ... अस्थायी रूप से इन फ़ाइलों को किसी भिन्न स्थान पर ले जाना जैसे /usr/share/zoneinfo/.bak/कि कमांड के लिए अनुमति देता है

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql

पूरी तरह से अपेक्षित टाइमजोन जानकारी के सभी को आबाद करने के लिए।

यह MySQL के मेरे स्थापित संस्करण में बग नहीं हो सकता है:

$ mysql --version
mysql  Ver 14.14 Distrib 5.6.11, for osx10.6 (x86_64) using  EditLine wrapper

में भी संचालित हो रहा हूँ STRICT_MODE

किसी भी मामले में, मुझे उम्मीद है कि यह किसी को भी ठीक करने के लिए खोज करने के लिए कुछ सिरदर्द बचाता है।


13

विंडोज वातावरण के अलावा, आप टाइम ज़ोन सेट कर सकते हैं

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql

में विंडोज वातावरण,

1. download Time zone description tables from http://dev.mysql.com/downloads/timezones.html

2. Stop MySQL server

3. Put then inside Mysql installation package (अर्थात। C: \ Program Files \ MySQL \ data \ mysql) `

4. Start MySQL server

।।आपका काम पूरा हुआ ।।

अगर फिर भी आप इन डेटाबेस टेबलों NULLको CONVERT_TZडाउनलोड कर रहे हैं और इसे mysql डेटाबेस में डालें http://www.4sared.com/folder/Toba2qu-/Mysql_timezone.html

अब आपकी समस्या का समाधान हो जाएगा .. :)


2

यदि आप Windows पर MySql का उपयोग कर रहे हैं, तो आपको mysql स्कीमा में टाइमज़ोन डेटा लोड करना होगा। यहाँ एक अच्छा HOWTO है: http://www.geeksengine.com/article/populate-time-zone-data-for-mysql.html

यदि आप ऐसा नहीं करते हैं, तो CONVERT_TZ फ़ंक्शन आपके इनपुट टाइमज़ोन (यानी आपके उदाहरण: 'UTC', 'एशिया / जकार्ता') को नहीं पहचानेगा, और केवल NULL को लौटा देगा।


2

MAMP प्रो

  1. खुला हुआ Terminal
  2. cd /usr/share/zoneinfo/
  3. sudo mv +VERSION ~/Desktop
  4. cd /applications/MAMP/Library/bin
  5. sudo ./mysql_tzinfo_to_sql /usr/share/zoneinfo | ./mysql -p -u root mysql
  6. sudo mv ~/Desktop/+VERSION /usr/share/zoneinfo/

बाइनरी फ़ोल्डर के स्थान के अलावा, यह सामान्य रूप से macOS पर लागू होता है। धन्यवाद!
बृहस्पतिवार को

2

1) विंडोज में, C:\Program Files\MySQL\अन्य उत्तरों की तरह अब कोई डेटा फोल्डर नहीं है।

2) उस मामले में, देखें C:\ProgramData\MySQL\MySQL Server 5.x\Data\mysql। आम तौर पर यह फ़ोल्डर छिपा होता है और आपको C:\ProgramData\कुछ समय नहीं दिखेगा ।

3) हिडन फाइल और फोल्डर देखने के लिए व्यू टैब में सेटिंग्स बदलें जैसा कि यहाँ समझाया गया है https://irch.info/index.php?pg=kb.page&id=133

4) विंडोज स्टार्ट बटन में "सेवाओं" के लिए खोज करके MySQL सेवा बंद करें।

5) इसके बाद टाइमज़ोन_2017c_posix.zip को अनज़िप करें और फिर इसमें फाइलों को कॉपी करें (फाइलों को सीधे कॉपी करें, पूरे फ़ोल्डर को खुद कॉपी न करें), और इसमें पेस्ट करें C:\ProgramData\MySQL\MySQLServer5.x\Data\mysql\

6) MySQL 5.7 के लिए, timezone_2017c_posix.zip अनज़िप करने के बाद सिर्फ .sql फ़ाइल देगा और यह समस्या हल नहीं हो सकती है। तो आगे बढ़ो और 5.6 फ़ाइल के लिए ज़िप फ़ाइल डाउनलोड करें, भले ही आप MySQL 5.7 चला रहे हों और उन फ़ाइलों को कॉपी करेंC:\ProgramData\MySQL\MySQL Server 5.x\Data\mysql\

7) MySQL सर्वर को पुनरारंभ करें। यह जाँचने के लिए कि CONVERT_TZ () काम कर रहा है, इस sql क्वेरी को चलाएँ।

SELECT CONVERT_TZ('2004-01-01 12:00:00','UTC','Asia/Jakarta'); और गैर-शून्य आउटपुट के लिए जाँच करें।


1
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql

यदि आपको त्रुटि मिलती है data too long for column 'abbreviation' at row 1 तो देखें: https://bugs.mysql.com/bug.php?id=68861

फिक्स निम्नलिखित को चलाने के लिए होगा

यह mysql मोड को अक्षम करने के लिए एक पंक्ति जोड़ देगा और mysql को काटे गए डेटा को सम्मिलित करने की अनुमति देगा क्योंकि यह mysql बग के कारण था जहाँ mysql अंत में एक अशक्त वर्ण जोड़ देगा (उपरोक्त लिंक के अनुसार)

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
(if the above gives error "data too long for column 'abbreviation' at row 1")
mysql_tzinfo_to_sql /usr/share/zoneinfo > /tmp/zut.sql

echo "SET SESSION SQL_MODE = '';" > /tmp/mysql_tzinfo_to.sql
cat /tmp/zut.sql >> /tmp/mysql_tzinfo_to.sql

mysql --defaults-file=/etc/mysql/my.cnf --user=verifiedscratch -p mysql < /tmp/mysql_tzinfo_to.sql

मेरे पास OSX El Capitan है और यह काम करने का एकमात्र उत्तर है। भविष्य के संदर्भ के लिए: मेरे मामले में त्रुटि बताती है: "पंक्ति 1 पर कॉलम 'संक्षिप्तिकरण' के लिए डेटा बहुत लंबा है"। नोट: अन्य उत्तरों में उल्लिखित फाइलों के (sudo) mkdir या (sudo) mv करने के सभी प्रयास 'अनुमति से वंचित' हैं
hepabolu

BTW मैं MySQL को पुनरारंभ करने की जरूरत नहीं थी।
हेपाबेलू

1

यदि आप विंडोज़ में हैं और MySQL 5.7 का उपयोग कर रहे हैं तो यह काम करने के लिए कदम हैं।

  1. My Computer / Computer / This PC पर राइट क्लिक करें या आपके OS में जो भी नाम है और गुण चुनें।
  2. बाएं पैनल से "उन्नत सिस्टम सेटिंग्स" चुनें।
  3. "पर्यावरण चर" चुनें, अपने MySQL बिन निर्देशिका का पूरा पथ नाम दर्ज करें (आमतौर पर यह C: \ Program Files \ MySQL \ MySQL सर्वर 5.7 \ bin में होगा)।
  4. Cmd प्रॉम्प्ट खोलें, mysql का उपयोग करके दर्ज करें mysql -u root -p password
  5. use mysqlMySQL DB का चयन करने के लिए दर्ज करें।
  6. फ़ाइल "टाइमज़ोन_YYYYc_posix_sql.zip" डाउनलोड करें (YYYY के स्थान पर, उस पृष्ठ में उपलब्ध अधिकतम वर्ष को 2017 या 2018 जैसे) https://dev.mysql.com/nownloads/timezones.html से स्थानापन्न करें
  7. इसे निकालें और फ़ाइल को टेक्स्ट एडिटर में खोलें।
  8. सामग्री की प्रतिलिपि बनाएँ और cmd प्रॉम्प्ट में निष्पादित करें।

सफल समापन पर, आप का उपयोग करने में सक्षम होना चाहिए CONVERT_TZऔर अन्य समयक्षेत्र कार्य।


0

XAMPP का उपयोग करते समय Mac OS Catalina पर,

टर्मिनल में / एप्लिकेशन / XAMPP / xamppfiles / bin फ़ोल्डर में जाएं, फिर निम्नलिखित रन करें।

./mysql_tzinfo_to_sql / usr / share / zoneinfo | sed -e "s / Local time zone सेट होना चाहिए - zic मैन्युअल पेज / लोकल /" देखें | ./Mysql -u रूट mysql

इसने मेरे लिए काम किया।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.