mysqli_set_charset
का इस्तेमाल करें
आपके कनेक्ट होने के बाद क्लाइंट एन्कोडिंग को UTF-8 में बदलने के लिए:
$mysqli->set_charset("utf8");
क्लाइंट एन्कोडिंग वह है जो MySql आपके इनपुट में होने की अपेक्षा करता है (उदाहरण के लिए जब आप किसी खोज क्वेरी में उपयोगकर्ता द्वारा प्रदत्त टेक्स्ट सम्मिलित करते हैं) और यह आपको क्या परिणाम देता है (इसलिए इसे echo
चीजों को सही ढंग से प्रदर्शित करने के लिए)।
और . के ऊपर के दो परिदृश्यों को ध्यान में रखते हुए आपको इसे अपने वेब पेज के एन्कोडिंग से मेल खाना चाहिए PHP स्रोत फ़ाइल की एन्कोडिंग (ताकि आपके प्रश्नों के हार्डकोड किए गए भागों की सही व्याख्या की जा सके)।
अपडेट:लैटिन-1 का उपयोग करके डाले गए डेटा को utf-8 में कैसे बदलें
डेटा के संबंध में जो पहले से ही गलत कनेक्शन एन्कोडिंग का उपयोग करके डाला गया है, समस्या को ठीक करने के लिए एक सुविधाजनक समाधान है। इस प्रकार के डेटा वाले प्रत्येक कॉलम के लिए आपको यह करना होगा:
ALTER TABLE table_name MODIFY column_name existing_column_type CHARACTER SET latin1;
ALTER TABLE table_name MODIFY column_name BLOB;
ALTER TABLE table_name MODIFY column_name existing_column_type CHARACTER SET utf8;
प्लेसहोल्डर table_name
, column_name
और existing_column_type
हर बार आपके डेटाबेस से सही मानों के साथ प्रतिस्थापित किया जाना चाहिए।
यह क्या करता है
- MySQL को बताएं कि उसे उस कॉलम में latin1 में डेटा स्टोर करने की आवश्यकता है। इस वर्ण सेट में utf8 का केवल एक छोटा उपसमुच्चय होता है, इसलिए सामान्य तौर पर इस रूपांतरण में डेटा हानि शामिल होती है, लेकिन इस विशिष्ट परिदृश्य में डेटा को पहले से ही इनपुट पर लैटिन 1 के रूप में व्याख्या किया गया था, इसलिए कोई साइड इफेक्ट नहीं होगा। हालांकि, MySQL आपके डेटा के बाइट प्रतिनिधित्व को आंतरिक रूप से परिवर्तित कर देगा, जो मूल रूप से PHP से भेजा गया था।
- कॉलम को बाइनरी टाइप में बदलें (
BLOB
) जिसमें कोई संबद्ध एन्कोडिंग जानकारी नहीं है। इस बिंदु पर कॉलम में कच्चे बाइट्स होंगे जो एक उचित utf8 वर्ण स्ट्रिंग हैं। - स्तंभ को उसके पिछले वर्ण प्रकार में बदलें, MySql को बताते हुए कि कच्चे बाइट्स को utf8 एन्कोडिंग में माना जाना चाहिए।
चेतावनी:आप इस अंधाधुंध दृष्टिकोण का उपयोग केवल तभी कर सकते हैं जब विचाराधीन कॉलम में केवल हो गलत तरीके से डाला गया डेटा। कोई भी डेटा जो सही ढंग से डाला गया है, किसी भी गैर-ASCII वर्ण की पहली घटना पर छोटा कर दिया जाएगा!
इसलिए PHP साइड फिक्स के प्रभावी होने से पहले, इसे अभी करना एक अच्छा विचार है।