MySQL और phpMyAdmin में हिंदी टेक्स्ट की एन्कोडिंग ठीक करें

phpMyAdmin, आपकी SQL डंप फ़ाइल या ऐप में हिंदी की जगह हिंदी या ???? दिखता है? आमतौर पर टेबल, कनेक्शन और इम्पोर्ट का charset आपस में मेल नहीं खाता। Mojibuster आपके ब्राउज़र में ही एक्सपोर्ट ठीक कर देता है – फिर आप MySQL को हमेशा के लिए सही सेट करें।

टेक्स्ट और ये फ़ाइलें चलती हैं:

  • CSV
  • TXT
  • JSON
  • XML
  • SRT
  • VTT
  • SMI
  • TSV
  • MD
  • HTML
  • SQL
  • LOG

जैसे Excel एक्सपोर्ट, डेटाबेस डंप, सबटाइटल या वेबसाइट का कोड।

ठीक करें

  1. फ़ाइल खींचकर लाएँ या टेक्स्ट पेस्ट करें
  2. अपने-आप ठीक हो जाता है
  3. कॉपी या डाउनलोड करें
या फ़ाइल यहाँ खींचकर लाएँ
  • कोई अपलोड नहीं। फ़ाइलें आपके ब्राउज़र में ही ठीक होती हैं और आपके डिवाइस से बाहर नहीं जातीं।

  • सर्वर EU में। Mojibuster फ़िनलैंड (EU) के एक सर्वर पर चलता है, इसलिए यूरोप का सामान्य डेटा संरक्षण विनियमन (GDPR) लागू होता है। GDPR पढ़ें (EUR-Lex, अंग्रेज़ी)

MySQL में एन्कोडिंग तीन जगह तय होती है

  • कॉलम या टेबल: डेटा किस character set में रखा जाता है, जैसे utf8mb4 या latin1।
  • कनेक्शन: क्लाइंट और सर्वर किस character set में बात करते हैं – SET NAMES utf8mb4 से या कनेक्शन सेटिंग में तय होता है।
  • फ़ाइल: इम्पोर्ट पढ़ने या एक्सपोर्ट लिखने की एन्कोडिंग – phpMyAdmin में Character set of the file के नाम से मिलती है।

तीनों में मेल न हो तो अक्षर टूट जाते हैं। सबसे आम मामला: UTF-8 में लिखी हिंदी latin1 कनेक्शन से latin1 कॉलम में चली गई। ऐप में सब ठीक दिखता है, पर phpMyAdmin और एक्सपोर्ट में हिंदी दिखता है।

phpMyAdmin के CSV एक्सपोर्ट की एक पंक्ति

पहले

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 पहले से टूटा हुआ ह है।

एक्सपोर्ट या डंप ठीक करें

  1. phpMyAdmin में टेबल को SQL या CSV में एक्सपोर्ट करें – या mysqldump --default-character-set=utf8mb4 से।
  2. फ़ाइल को ऊपर के बॉक्स में डालें। Mojibuster सिर्फ़ टूटी जगहें ठीक करता है; सही अक्षर जस के तस रहते हैं।
  3. क्या बदला? में ठीक की गई जगहें देखें और फ़ाइल डाउनलोड करें।
  4. उसे utf8mb4 वाली टेबल में इम्पोर्ट करें और इम्पोर्ट डायलॉग में character set utf-8 चुनें।
  5. असली टेबल बदलने से पहले कॉपी पर जाँच कर लें।

एक्सपोर्ट आपके कंप्यूटर से बाहर नहीं जाता – ग्राहकों के डेटा के लिए यह ज़रूरी है। 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 तक। बड़े डेटाबेस को टेबल-दर-टेबल एक्सपोर्ट करें।

और गाइड