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



المحتويات:




ما هي مشكلة الترميز باللغة العربية في قاعدة بيانات MySQL؟

عند التعامل مع قاعدة بيانات MySQL، يحدث معنا احياناً ان نقوم بادخال بعض البيانات باللغة العربية في جداول قاعدة بيانات MySQL، ونتفاجأ بظهور علامات استفهام ؟؟؟ في الحقول التي تمت كتابتها باللغة العربية، كما هو واضح بالصورة ادناه:

php mysql arabic encoding

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

php mysql arabic encoding

كيف يمكن حل هذه المشكلة:

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




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

اذا كنت لم تقم حتى الان بإنشاء قاعدة البيانات ففي هذه الحالة عند دخولك على الواجهة العامة للـ phpMyAdmin، تأكد من أن الترميز لدى السيرفر هو الترميز utf8_general_ci

php mysql arabic encoding

وعند إنشائك لقاعدة البيانات قم باختيار الترميز utf8_general_ci، كما هو موضح في الصورة:

php mysql arabic encoding

مع العلم انه يمكنك إنشاء قاعدة بيانات جديدة تدعم الترميز العربي باستخدام الاستعلام التالي:

CREATE DATABASE your_database_name DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;



حل مشكلة الترميز العربي في قاعدة بيانات موجودة حالياً باستخدام phpMyAdmin:

أما اذا كنت تمتلك قاعدة بيانات حالياً وتعاني من مشكلة علامات الاستفهام وتريد ان تقوم بتعديل ترميزها فقم بالخطوات التالية من داخل الـ phpMyAdmin الخاص بالسرفر لديك:

  1. قم بتحديد قاعدة البيانات من القائمة لديك وتأكد انها هي قاعدة البيانات التي تعمل عليها الآن.
  2. قم الدخول على قائمة العمليات Operations .
  3. قم بتغير الترميز من القائمة المسندلة الى الترميز utf8_general_ci
  4. قم باختيار تطبيق التعديل ايضاً على جداول قاعدة البيانات وعلى اعمدة تلك الجداول.

جميع هذه الخطوات مرتبة وموضحة في هذه الصورة.

php mysql arabic encoding

حل مشكلة الترميز العربي في قاعدة بيانات موجودة حالياً باستخدام تعليمات الـ SQL:

ويمكن أيضاً تطبيق الخطوات السابقة من خلال استعلامات 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 column_data_type CHARACTER SET utf8 COLLATE utf8_general_ci


دعم الترميز العربي عند الاتصال بقاعدة البيانات MySQL من خلال اكواد PHP:

عند قيامك بالاتصال بقاعدة البيانات من خلال اكواد الـ PHP مثلاً قم بتطبيق هذه الاكواد لاجراء اتصال ناجح وداعم للغة العربية:

<?php
//1. Using mysqli functions:
//connect MySQL database
$link = mysqli_connect(HOSTNAME,DATABASE_USERNAME,DATABASE_PASSWORD,DATABASE_NAME)or die("Incorrect DB info");

//Add Arabic support codes
mysqli_query($link, "SET NAMES 'utf8'") or die('Can\'t charset in DataBase');
mysqli_query($link, "SET CHARACTER SET utf8") or die('Can\'t charset in DataBase');
?>


ويمكن ايضاً القيام بها من خلال هذه الاكواد ايضاً

<?php
//2. Using PDO (PHP Data Object):
$link = new PDO('mysql:host=localhost;dbname=' . $DB_NAME, $DB_USER, $DB_PASS, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'"));
$link->exec("SET CHARACTER SET UTF8");
?>



تحياتي لكم ودمتم بود



2021-09-22 16:01:06
صفوان الصلوي | Safwan Alselwi

صفوان الصلوي | Safwan Alselwi

مهندس برمجيات وصانع محتوى تعليمي ومهتم بالتقنية ولغات البرمجة، اقوم في مدوناتي بنقل خبرتي المعرفية للمهتمين في نفس المجال



إقرأ المزيد من المدونات



All rights reserved - SAF1 © 2024

Home   |   Tutorials   |   Blog
Privacy Policy   |   Terms & Conditions