MySQL ও phpMyAdmin-এ বাংলা লেখার এনকোডিং ঠিক করুন

phpMyAdmin, আপনার SQL ডাম্প বা অ্যাপে বাংলার বদলে বাংলা বা ???? দেখাচ্ছে? সাধারণত টেবিল, কানেকশন ও ইমপোর্টের charset নিজেদের মধ্যে মেলে না। Mojibuster আপনার ব্রাউজারেই এক্সপোর্ট ঠিক করে দেয় – তারপর MySQL চিরকালের জন্য ঠিকভাবে সাজান।

লেখা এবং এই ফাইলগুলো চলে:

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

যেমন Excel এক্সপোর্ট, ডেটাবেস ডাম্প, সাবটাইটেল বা ওয়েবসাইটের কোড।

ঠিক করুন

  1. ফাইল টেনে আনুন বা লেখা পেস্ট করুন
  2. নিজে থেকেই ঠিক হয়ে যায়
  3. কপি বা ডাউনলোড করুন
অথবা ফাইল এখানে টেনে আনুন
  • কোনো আপলোড নেই। ফাইল আপনার ব্রাউজারেই ঠিক হয়, আপনার ডিভাইস ছেড়ে যায় না।

  • ইইউ-তে সার্ভার। Mojibuster চলে ফিনল্যান্ড-এর (ইইউ) একটি সার্ভারে, তাই ইউরোপের সাধারণ তথ্য সুরক্ষা প্রবিধান (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 এক্সপোর্টের একটি সারি

আগে

Avwg evsjvq Mvb MvB Avgvi ‡mvbvi evsjv

পরে

আমি বাংলায় গান গাই আমার সোনার বাংলা

Character set দেখে নিন

  • SHOW VARIABLES LIKE 'character_set%'; সার্ভার ও কানেকশনের সেটিংস দেখায়।
  • SHOW CREATE TABLE customers; টেবিল ও তার কলামের character set দেখায়।
  • SELECT name, HEX(name) FROM customers LIMIT 5; আসল বাইট দেখায়: utf8mb4 কলামে E0A6AC ঠিক ব, আর C3A0C2A6C2AC আগেই ভাঙা ব।

এক্সপোর্ট বা ডাম্প ঠিক করুন

  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 পর্যন্ত। বড় ডেটাবেস টেবিল ধরে ধরে এক্সপোর্ট করুন।

আরও গাইড