MySQL में एन्कोडिंग तीन जगह तय होती है
- कॉलम या टेबल: डेटा किस character set में रखा जाता है, जैसे
utf8mb4याlatin1। - कनेक्शन: क्लाइंट और सर्वर किस character set में बात करते हैं –
SET NAMES utf8mb4से या कनेक्शन सेटिंग में तय होता है। - फ़ाइल: इम्पोर्ट पढ़ने या एक्सपोर्ट लिखने की एन्कोडिंग – phpMyAdmin में Character set of the file के नाम से मिलती है।
तीनों में मेल न हो तो अक्षर टूट जाते हैं। सबसे आम मामला: UTF-8 में लिखी हिंदी latin1 कनेक्शन से latin1 कॉलम में चली गई। ऐप में सब ठीक दिखता है, पर phpMyAdmin और एक्सपोर्ट में हिंदी दिखता है।
पहले
Hkkjr esa fganh Hkk"kk dk iz;ksx cgqr gksrk gS
बाद में
भारत में हिंदी भाषा का प्रयोग बहुत होता है
Character set जाँचें
SHOW VARIABLES LIKE 'character_set%';सर्वर और कनेक्शन की सेटिंग दिखाता है।SHOW CREATE TABLE customers;टेबल और उसके कॉलम का character set दिखाता है।SELECT name, HEX(name) FROM customers LIMIT 5;असली बाइट दिखाता है:utf8mb4कॉलम मेंE0A4B9सहीहहै, जबकिC3A0C2A4C2B9पहले से टूटा हुआहहै।
एक्सपोर्ट या डंप ठीक करें
- phpMyAdmin में टेबल को SQL या CSV में एक्सपोर्ट करें – या
mysqldump --default-character-set=utf8mb4से। - फ़ाइल को ऊपर के बॉक्स में डालें। Mojibuster सिर्फ़ टूटी जगहें ठीक करता है; सही अक्षर जस के तस रहते हैं।
- क्या बदला? में ठीक की गई जगहें देखें और फ़ाइल डाउनलोड करें।
- उसे
utf8mb4वाली टेबल में इम्पोर्ट करें और इम्पोर्ट डायलॉग में character setutf-8चुनें। - असली टेबल बदलने से पहले कॉपी पर जाँच कर लें।
एक्सपोर्ट आपके कंप्यूटर से बाहर नहीं जाता – ग्राहकों के डेटा के लिए यह ज़रूरी है। Excel में खोलने की दिक्कत हो तो Excel और CSV में हिंदी फ़ॉन्ट की समस्या पृष्ठ देखें।
असली कारण ठीक करें
- नई टेबल
DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ciके साथ बनाएँ। - ऐप का कनेक्शन
utf8mb4पर रखें, PHP में जैसे PDO DSN मेंcharset=utf8mb4। - अगर
latin1कॉलम में UTF-8 बाइट पड़े हैं, तो उसे सीधेCONVERT TOसे न बदलें – इससे वे दूसरी बार एन्कोड हो जाते हैं। सुरक्षित रास्ता बाइनरी टाइप से है: पहलेMODIFY name VARBINARY(255), फिरMODIFY name VARCHAR(255) CHARACTER SET utf8mb4। - अगर MySQL अक्षरों की जगह
?रख देता है, तो कॉलम या कनेक्शन उन्हें रख ही नहीं सकता। जो इस तरह सेव हो चुका है वह खो गया है – इसके बारे में मोजिबाके क्या है में पढ़ें।
अक्सर पूछे जाने वाले सवाल
ऐप में सब ठीक दिखता है, phpMyAdmin में क्यों नहीं?
क्योंकि ऐप और डेटाबेस एक ही गलती दो बार करते हैं: ऐप UTF-8 को latin1 कनेक्शन से लिखता है और उसी तरह वापस पढ़ता है। phpMyAdmin सही कनेक्शन से जुड़ता है, इसलिए वही दिखाता है जो सचमुच सेव है। WordPress चलाते हैं तो WordPress और डेटाबेस तथा दो बार बिगड़ा टेक्स्ट भी देखें।
कौन-सा collation चुनूँ?
ज़्यादातर ऐप के लिए utf8mb4_unicode_ci ठीक है; MySQL 8 से utf8mb4_0900_ai_ci डिफ़ॉल्ट है। collation से ज़्यादा ज़रूरी character set utf8mb4 है – utf8 नहीं, जो MySQL में इमोजी नहीं रख सकता।
क्या यह MariaDB में भी चलता है?
हाँ। MariaDB character set वैसे ही संभालता है जैसे MySQL, और कमांड वही हैं।
डंप कितना बड़ा हो सकता है?
हर फ़ाइल 100 MB तक। बड़े डेटाबेस को टेबल-दर-टेबल एक्सपोर्ट करें।