حل مشكلة تخزين اللغة العربية في قواعد بيانات MySQL

وحدة من مشاكل تعلم البرمجة عند الناس هي كيف تبرمج، لكن عندنا يالعرب مشكلة ثانية اصعب وهي التعامل مع اللغة العربية أو اليونيكود في البرامج. أحيانا لما ابرمج شغلة اخلصها بسرعة لكن يروح وقت اكثر من البرمجة نفسها في محاولات حل مشكلة العربي والونيكود. لهذا السبب قلت اكتب الشرح هذا في طريقة تخزين العربي في قواعد بيانات MySQL عن طريق لغة برمجة PHP.

مشكلة اللغة العربية في قواعد البيانات

الخطوات بسيطة وما راح تاخذ منك اكثر من دقايق لحل المشكلة كاملة 😉

طريقة حل مشكلة العربي واليونيكود unicode في قواعد بيانات MySQL باستخدام البي اتش بي

تغيير نوع قاعدة البيانات إلى اليونيكود المناسب

By default, MySQL makes all tables and the Collation as utf8_unicode_ci. You should change this for all your unicode columns to utf8_general_ci.
في الوضع الإفتراضي, ماي اس كيو إل راح ينشيء الجداول والخانات تحت ترميز utf8_unicode_ci. الترميز هذا ما يشتغل ويجب تغييره إلى ترميز utf8_general_ci.

unicode in mysql

 

جعل اتصال الـphp لقاعدة البيانات متوافق مع العربي واليونيكود

هنا كانت النقطة اللي تطلبت مني بحث مكثف وما حصلت احد بالمواقع يتكلم عنها. نقطة بسيطة جدا لحل مشكلة العربي في البرمجة والتخزين. المطلوب انك تجعل اتصال البي اتش بي يقبل اليونيكود قبل ما تبدأ اوامر التخزين. هنا الطريقة:

هذا الكود اللي بالعادة نكتبه لما ننشئ اتصال بين البي اتش بي وقاعدة البيانات

@mysql_connect($DB_host, $DB_user, $DB_pass) or die("Could not connect!");
@mysql_select_db($DB_name) or die("Could not select database!");

الطريقة ببساطة انك تظيف الأمر mysql_set_charset('utf8'); بعد ما تنشئ الاتصال بقاعدة البيانات مباشرة. هنا يكون شكل الكود:

@mysql_connect($DB_host, $DB_user, $DB_pass) or die("Could not connect!");
mysql_set_charset('utf8');
@mysql_select_db($DB_name) or die("Could not select database!");

 

تخزين ملف البي اتش بي بصيغة يونيكود

أيضا هذه النقطة كانت من الأشياء اللي تطلبت مني وقت لحلها. بكل بساطة لما تخزن ملف البي اتش بي نفسه لازم تخلي الترميز حقه ترميز يونيكود. كل برنامج طبعا له طريقته، وانا البرنامج اللي استخدمه هو NotePad++ وهنا طريقة التحويل:

Unicode notepad++

 

 

طبعا لا تنسى اذا كنت تبي تعرض عربي في المتصفح انك تكتب الميتا تاق المناسب داخل تاق الـ head. وهذا المطلوب كتابته:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

وأيضا اذا كان عندك خانات يدخلها المستخدم لازم في تاق الـ form تحط الخاصية التالية:

accept-charset="utf-8"

هذا كل اللي تحتاجه لحل مشكلة اللغة العربية في قواعد بيانات MySQL ولغة برمجة PHP. اكتب لي اذا الشرح هذا حل مشكلتك، أو اذا واجهتك أي مشاكل. وطبعا تقدر تنشر الشرح هذا عن طريق الأزرار اللي تحت علشان تفك أزمة شخص ثاني وتخليه يدعي لنا 🙂


       

Comments (19)

  1. هلا عزيزي ,,

    لقد طبقت الخطوات جميعها لكن utf8_general_ci غير موجوده في الخيارات الخاصه بالترميز بس موجود utf16_general_ci اخترته بس لازالت نفس المشكله موجوده مع اني طبقت كل الخطوات

  2. Pingback: حل مشكلة تخزين اللغة العربية في قواعد بيانات MySQL – المدرسة العربية للبرمجة

  3. لم تحل هذه المشكلة بعد ما جربت كل هذه الخطوات فما العمل جزاكم الله خير

  4. طبقت أنا أيضا جميع ما ذكرت استاذي على المدونة ..ولكن دون فائدة ولك أن تزور الموقع وترى بنفسك http://yemenguys.com. فيا ترى هل هناك حل آخر بهذا الخصوص. وشكرا على الشرح الرائع وجزاك الله خير

    • السلام عليكم، هل النص الموجود هنا كان مخزن في قاعدة البيانات قبل تطبيق التغييرات؟ لأن البيانات يجب ان تكتب من البداية بترميز اليونيكود. جرب مسح البيانات وإدخال بيانات جديدة. أيضا، كيف عرض الحروف في phpmyadmin؟ هل هو صحيح هناك؟

  5. الحمد لله تم حل المشكلة ولكن فى مشكلة اخرى هى ان هذا الكون mysql_set_charset(‘utf8’); غير ثابت بمعنى انى لوحدثت الاستعلام او غيرته يتم حذفه ززز ياريت طريقة لتثبيت هذا الكود

  6. السلام عليك اخي الكريم .. مشكور على الشرح انقذتني والله ..
    كان عندي مشكل في حفظ الملفات بالتكويد utf8 .. ولله الحمد تم اصلاحه كل شئ تمام الان ..
    بارك الله فيك.

  7. Pingback: غير معروف

  8. مرحبا بالجميع عندي مشكلة عدم عرض اللغة العربية في قاعدة بيانات mariadb
    هل يوجد احد يستطيع المساعدة شكرا

اترك رد