सही एन्कोडिंग प्राप्त करना वास्तव में मुश्किल है - बहुत सारी परतें हैं:
- ब्राउज़र
- पृष्ठ
- पीएचपी
- माई एसक्यूएल
PHP से SQL कमांड "SET CHARSET utf8" यह सुनिश्चित करेगा कि ग्राहक पक्ष (PHP) को utf8 में डेटा मिलेगा, चाहे वे डेटाबेस में कैसे संग्रहीत हों। बेशक, उन्हें पहले सही ढंग से संग्रहीत करने की आवश्यकता है।
डीडीएल परिभाषा बनाम वास्तविक डेटा
तालिका / स्तंभ के लिए परिभाषित एन्कोडिंग वास्तव में इसका मतलब यह नहीं है कि डेटा उस एन्कोडिंग में हैं। यदि आप एक टेबल के रूप में परिभाषित किया गया है, utf8
लेकिन अलग एन्कोडिंग के रूप में संग्रहीत किया गया है, तो MySQL उन्हें के रूप में इलाज करेंगे utf8
और आप मुसीबत में हैं। जिसका मतलब है कि आपको पहले इसे ठीक करना होगा।
क्या जाँच करें?
आपको यह जांचने की जरूरत है कि प्रत्येक लेयर में डेटा इनकोडिंग कौन सी है।
- HTTP हेडर, हेडर चेक करें।
- जांचें कि वास्तव में अनुरोध के मुख्य भाग में क्या भेजा गया है।
- यह न भूलें कि MySQL में लगभग हर जगह एन्कोडिंग है:
- डेटाबेस
- टेबल्स
- कॉलम
- सर्वर एक पूरे के रूप में
- ग्राहक
सुनिश्चित करें कि हर जगह सही है।
रूपांतरण
यदि आप उदाहरण में डेटा प्राप्त करते हैं windows-1250
, और स्टोर करना चाहते हैं utf-8
, तो स्टोर करने से पहले इस SQL का उपयोग करें:
SET NAMES 'cp1250';
यदि आपके पास DB में डेटा है windows-1250
और फिर से प्राप्त करना चाहते हैं utf8
, तो उपयोग करें:
SET CHARSET 'utf8';
कुछ और नोट:
- डेटा दिखाने के लिए बहुत "स्मार्ट" टूल पर भरोसा न करें। उदाहरण के लिए phpMyAdmin करता है (जब मैं इसका उपयोग कर रहा था तो कर रहा था) वास्तव में बुरा एन्कोडिंग। और यह सभी परतों से गुजरता है इसलिए इसका पता लगाना कठिन है।
- इसके अलावा, इंटरनेट एक्सप्लोरर में वास्तव में अजीब नियमों के आधार पर एन्कोडिंग "अनुमान" का व्यवहार था।
- सरल संपादकों का उपयोग करें जहां आप एन्कोडिंग स्विच कर सकते हैं। मैं MySQL कार्यक्षेत्र की सलाह देता हूं।