character encoding - Migrating data between two MySQL with different character_set%, messed up with utf8 -
MySQL server1 से MySQL server2 में माइग्रेट करना
server1 Ver 14.12 डिब्रिब 5.0.51 ए, debian-
mysql & gt; 'वर्ण_सेट%' की तरह वर्ण दिखाएं; + -------------------------- + ---------------------- -------------------- + | Variable_name | मूल्य | + -------------------------- + ---------------------- -------------------- + | चरित्र_सेट_क्लाइन | यूटीएफ 8 | | चरित्र_सेट_कनेक्शन | यूटीएफ 8 | | चरित्र_सेट_डेटाबेस | यूटीएफ 8 | | चरित्र_सेट_फ़ाइलसिस्टम | बाइनरी | | कैरेक्टर_सैट_रैस्ट्स | यूटीएफ 8 | | चरित्र_सेट_सर्वर | लैटिन 1 | | चरित्र_सेट_सिस्टम | यूटीएफ 8 | | चरित्र_सेट्स_दर | / डेटा / मायसाइक्ल / गबिनो / शेयर / आईएसएसएलएल / वर्णसेट / | + -------------------------- + ---------------------- -------------------- सेट में + 8 पंक्तियां सर्वर 2 देखें 14.12 डिस्ट्रीब्यूबल 5.0.90, PC-linux-gnu के लिए (X86_64) रीडलाइन 6.0 का उपयोग
mysql & gt; 'वर्ण_सेट%' की तरह वर्ण दिखाएं; + -------------------------- + ---------------------- ------ + | Variable_name | मूल्य | + -------------------------- + ---------------------- ------ + | चरित्र_सेट_क्लाइन | यूटीएफ 8 | | चरित्र_सेट_कनेक्शन | यूटीएफ 8 | | चरित्र_सेट_डेटाबेस | यूटीएफ 8 | | चरित्र_सेट_फ़ाइलसिस्टम | बाइनरी | | कैरेक्टर_सैट_रैस्ट्स | यूटीएफ 8 | | चरित्र_सेट_सर्वर | यूटीएफ 8 | | चरित्र_सेट_सिस्टम | यूटीएफ 8 | | चरित्र_सेट्स_दर | / Usr / share / mysql / charsets / | + -------------------------- + ---------------------- सर्वर 1 MySQL एक वर्डप्रेस ब्लॉग का बैकेंड है, सब कुछ फ्रंटएंड से ठीक काम करता है, जब तक कि मैं (अशुभ आदमी) को डेटा माइग्रेट करना पड़ता है इसलिए मैंने PhpMyAdmin और MySQL कंसोल में लॉग इन किया है। अब बैकएंड से ऐसा लगता है कि सर्वर 1 में प्रत्येक पूर्व एशियाई वर्ण को गड़बड़ कर दिया गया है, या तो कंसोल या मायसाकडम्प फाइलों में SELECT क्वेरीज़ में। उदाहरण के लिए, चीनी वर्ण 看 तीन लैटिन 1 वर्ण çœ << / code> में बदल गया, जो एक ही परिणाम SELECT _latin1 '看' है। 看 की यूटीएफ 8 प्रस्तुति \ xe7 \ x 9c \ x8b है इसलिए किसी भी तरह से एक बाइट को एक चीनी चरित्र के रूप में 3 बाइट्स को प्रस्तुत करने के बजाय व्यक्तिगत लैटिन 1 वर्ण के रूप में प्रदर्शित किया गया।
यहां तक कि अगर मैं नेवाटैट 8 में 'डाटा ट्रांसफर' फ़ंक्शन का इस्तेमाल करता हूं तो दो डेटाबेस को सर्वर 1 से सर्वर 2 के समान रूप से प्रतिलिपि बनाने के लिए, सर्वर 2 पर चलने वाला नया ब्लॉग गड़बड़ करने वाले पात्रों को मिलता है। मैंने SET NAMES utf8 आदि जैसे विभिन्न तरीकों की कोशिश की और अब भी यह नहीं किया जा सकता है।
तो मैं कैसे कर सकता हूं / सर्वर 1 MySQL को कह सकता हूँ कि लैटिन 1 अक्षरों को यूटीएफ 8 के रूप में संभालना और उन्हें प्रदर्शित और सही ढंग से फेंक दिया गया?
एक हेक्स डंप करें (यानी: SELECT HEX (columnname) दोनों सर्वर पर तालिका से ) और देखें कि क्या डेटा समान है यदि यह है, तो आपको पता चल जाएगा कि कम से कम डेटा दूषित नहीं हुआ है।
इस मामले में, आपको सर्वर (एस) के लिए सही वर्णसेट और कोलेशन सेट करना होगा। यदि नहीं, तो संभवत: आपको डेटा ट्रांसफर को फिर से करना होगा, और इस समय के आसपास यह सुनिश्चित कर लें कि सेटिंग्स सही हैं।
एक और चीज यह सुनिश्चित करती है कि ब्राउज़र का एन्कोडिंग UTF-8 पर सेट है। < / P>
संपादित करें: इसलिए, डेटा किया हस्तांतरण में दूषित हो गया C3A7C593E280B 9 यूटीएफ -8 का प्रतिनिधित्व है çœ << / code>। ऐसा संभवतः क्योंकि सर्वर 1 को डेटा को लैटिन 1 और सर्वर 2 एन्कोड्स को यूटीएफ -8 में भेज रहा है।
डेटा ट्रांसफर करने से पहले आपको सर्वर 1 पर कनेक्शन सेटिंग्स को बदलना होगा। ऐसा करने के लिए, इन प्रश्नों को चलाएं:
SET CHARACTER SET utf8; फिर से डेटा स्थानांतरण का प्रयास करें।
संपादित करें 2: आपने जो कहा, उसके आधार पर, मुझे लगता है कि ऐसा हो रहा है। आपके डेटाबेस पर बैठे डेटा यूटीएफ -8 में एन्कोड किया गया है। जब PHP (Wordpress) इस डेटा को प्राप्त करता है, तो यह "सोचता है" यह लैटिन 1 (आईएसओ -885 9 -1) में एन्कोड किया गया है, जो कि दुर्भाग्य से पीएलए डिफ़ॉल्ट रूप से उपयोग करता है। पीएचपी इस डेटा को उपयोगकर्ता के ब्राउज़र को सेवा प्रदान करता है जैसे कि यह लैटिन 1 में एन्कोड किया गया था, लेकिन यूटिफ़ -8 के रूप में वर्ण एन्कोडिंग सेट करता है, और उपयोगकर्ता देखता है कि उसे क्या देखना चाहिए। संक्षेप में, यह एक सही बनाने के दो गलत मामलों का मामला। आपके पास अब दो विकल्प हैं:
-
डेटा ठीक करें (अर्थात्: इसे यूटीएफ -8 के रूप में पढ़िए और इसे लेटेन के रूप में दोबारा लिखना)
-
सर्वर 1 के कनेक्शन सेटिंग्स को उसी सर्वर 1 के रूप में सेट करें, जिसके परिणामस्वरूप अभी भी डेटा प्रदर्शित सही।
Comments
Post a Comment