درب النجاح

درب الناجحين العرب.

دورات مرئية كاملة، دروس و مقالات في المجال المعلوماتي.

تصفح الدورات تصفح الدروس

حل مشكل اللغة العربية في MySQL

10 د 2660 saidhamri 28/09/2015

المحتوى

المحتوى

السلام عليكم و رحمة الله تعالى وبركاته.

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

بما أننا بدأنا بدورة عملية لتعلم إنشاء برنامج إدارة المبيعات على الويب بلغة PHP و قاعدة البيانات من نوع MySQL، سنواكب هذه الدورة العملية إن شاء الله بمجموعة من الدروس الموجزة ذات الصلة بالموضوع.

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

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

إنشاء قاعدة البيانات بترميز عام

لتفادي هذا المشكل منذ البداية، يجب علينا أن نتصرف على هذا النحو:

  1. عند الدخول على واجهة تدبير قاعدة البيانات phpMyAdmin ل MySQL، تأكد من أن الترميز لدى السيرفر هو ترميز عام utf8_general_ci.

    server encode general

  2. عند إنشاء قاعدة بيانات، اختر الترميز العام utf8_general_ci.

    create new database

  3. يمكنك كذلك إنشائها من خلال الاستعلام SQL:

     

    CREATE DATABASE database_name DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

هكذا يطبق الترميز العام على الجداول والحقول فيصبح الترميز بالنسبة للجداول و الحقول عاما utf8_general_ci.

تعديل ترميز قاعدة بيانات موجودة مسبقا

هذه الإجراءات تطبق لحظة إنشاء قاعدة البيانات، أما إذا كانت لدينا قاعدة بيانات أنشأت مسبقا بترميز مختلف، ففي هذه الحالة يمكننا تغيير ترميزها كالتالي:

  1. بعد اختيار قاعدة البيانات، ندخل على القائمة Operations ثم في الجزء Collation نغير الترميز الى utf8_general_ci.

    database encode general

  2. نفس العمل بالنسبة للجداول، نختار الجدول ثم ندخل على القائمة Operations ثم في الجزء Table Options نختار في ال Collation الترميز utf8_general_ci.

    table encode general

  3. نفس الطريقة أيضا بالنسبة للحقول، نختار الجدول ثم ندخل على القائمة Struture ثم نضغط على الزر Change الخاص بالحقل الذي نريد تعديل ترميزه:

    field encode general

كل هذه العمليات يمكننا تطبيقها من خلال الاستعلامات SQL التالية:

  1. لتغيير ترميز قاعدة البيانات:

     

    ALTER DATABASE database_name CHARACTER SET utf8 COLLATE utf8_general_ci;

  2. لتغيير ترميز الجداول:

     

    ALTER TABLE table_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

  3. لتغيير ترميز الحقول:

     

    ALTER TABLE table_name MODIFY column_name VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci;

هذا من جهة قاعدة البيانات.

تحديد الترميز الخاص بمعالجة بيانات الاتصال

بقيت خطوة أخيرة يتم فيها تحديد الترميز الخاص بمعالجة بيانات الاتصال، وهي أن نضيف بعض الاستعلامات SQL إلى ملف الإتصال بهذا الشكل:

 

$srv = 'localhost'; $db = 'test'; $user = 'root'; $pwd = ''; try { $bdd = new PDO('mysql:host='.$srv.';dbname='.$db,$user,$pwd); //تحديد الترميز الخاص بمعالجة بيانات الاتصال $bdd->query("SET NAMES utf8"); $bdd->query("SET CHARACTER SET utf8"); } catch (Exception $e) { die('error !'.$e->getMessage()); }

نصيحة أخيرة

أنصحكم إخواني أخواتي بتحديد الترميز utf8_general_ci لحظة إنشاء قاعدة البيانات، لكي يطبق الترميز العام على كل الجداول وحقولها فترث بذلك الترميز من قاعدة البيانات.

أسأل الله العلي القدير أن يوفقنا لما يحب ويرضى..

أنار الله دربكم و بالإيمان ملأ قلوبكم و السلام عليكم.

تحميل

mysql-arabic-encoding-problems
حل مشكل اللغة العربية في MySQL

حمل المشروع وتصفح الكود إذا واجهتك مشاكل في التطبيق.

تحميل

أضف تعليق

التعليقات 3

test

test 21/11/2016

مشكور اخى على الدروس
حسن البوطي

حسن البوطي 17/12/2016

شكرا لكم على هذا الشرح الرائع و المفيد
جزاكم الله كل خيرا - أعانكم على مزيد من الشروحات لرفع مستوى العالم العربي بهذه البرمجة
saidhamri

saidhamri 30/11/-0001

بارك الله فيكم أخي حسن
الشريف

الشريف 20/02/2017

السلام عليكم
أول خطوة لم أستطع تجاوزها السيرفر في خانة Server connection collation
يجبرني على استخدام utf8mb4_general_ci

استخدم xampp
إلغاء
ضع إشكاليتك هنا !

قالو عنا..

إلغاء
زدني من نهل علمك يا أستاذي أرتوي
***
حبي لأهل العلم جامح لن أرعوي
في الدرب إنني ماض كأنني
***
سهم في سماء العز علا لا ينحني

هدية من الأخ: خالد السعداني