المحتويات:
- ما هي مشكلة الترميز باللغة العربية في قاعدة بيانات MySQL؟
- كيف يمكن حل هذه المشكلة؟
- تجنب مشكلة الترميز العربي قبل إنشاء قاعدة البيانات
- حل مشكلة الترميز العربي في قاعدة بيانات موجودة حالياً باستخدام phpMyAdmin
- حل مشكلة الترميز العربي في قاعدة بيانات موجودة حالياً باستخدام تعليمات الـ SQL
- دعم الترميز العربي عند الاتصال بقاعدة البيانات MySQL من خلال اكواد PHP
ما هي مشكلة الترميز باللغة العربية في قاعدة بيانات MySQL؟
عند التعامل مع قاعدة بيانات MySQL، يحدث معنا احياناً ان نقوم بادخال بعض البيانات باللغة العربية في جداول قاعدة بيانات MySQL، ونتفاجأ بظهور علامات استفهام ؟؟؟ في الحقول التي تمت كتابتها باللغة العربية، كما هو واضح بالصورة ادناه:
حيث نلاحظ ان النصوص العربية فقط هي التي محتواها يكون كلمات مشفرة بعلامات استفهام غير مفهومة، اما النصوص الانجليزية فهي تعرض بشكل طبيعي ولا مشكلة فيها، وسبب هذه المشكلة في الأساس هو نوع الترميز المستخدم على قاعدة البيانات.
كيف يمكن حل هذه المشكلة:
هناك طرق كثيرة لحل هذه الاشكاليات وكلها تعتمد على اختيار ترميز مناسب ومتوافق مع اللغة العربية، لان الترميز الافتراضي لقاعدة بيانات MySQL هو latin1 واحياناً latin1_swedish_c، وكلامها لا يدعم اللغات مثل اللغة العربية والهندية والصينية وغيرها، لذلك يجب اختيار ترميز عام ومناسب لدعم اللغة العربية مثل الترميز utf8_general_ci.
تجنب مشكلة الترميز العربي قبل إنشاء قاعدة البيانات:
اذا كنت لم تقم حتى الان بإنشاء قاعدة البيانات ففي هذه الحالة عند دخولك على الواجهة العامة للـ phpMyAdmin، تأكد من أن الترميز لدى السيرفر هو الترميز utf8_general_ci
وعند إنشائك لقاعدة البيانات قم باختيار الترميز utf8_general_ci، كما هو موضح في الصورة:
مع العلم انه يمكنك إنشاء قاعدة بيانات جديدة تدعم الترميز العربي باستخدام الاستعلام التالي:
CREATE DATABASE your_database_name DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
حل مشكلة الترميز العربي في قاعدة بيانات موجودة حالياً باستخدام phpMyAdmin:
أما اذا كنت تمتلك قاعدة بيانات حالياً وتعاني من مشكلة علامات الاستفهام وتريد ان تقوم بتعديل ترميزها فقم بالخطوات التالية من داخل الـ phpMyAdmin الخاص بالسرفر لديك:
- قم بتحديد قاعدة البيانات من القائمة لديك وتأكد انها هي قاعدة البيانات التي تعمل عليها الآن.
- قم الدخول على قائمة العمليات Operations .
- قم بتغير الترميز من القائمة المسندلة الى الترميز utf8_general_ci
- قم باختيار تطبيق التعديل ايضاً على جداول قاعدة البيانات وعلى اعمدة تلك الجداول.
جميع هذه الخطوات مرتبة وموضحة في هذه الصورة.
حل مشكلة الترميز العربي في قاعدة بيانات موجودة حالياً باستخدام تعليمات الـ SQL:
ويمكن أيضاً تطبيق الخطوات السابقة من خلال استعلامات SQL التالية بالترتيب، ولكنها اكثر تعقيداً وتاخذ وقتاً اطول في كتابتها وتنفيذها وينصح بالطريقة السابقة.
- لتغيير ترميز قاعدة البيانات:
ALTER DATABASE database_name CHARACTER SET utf8 COLLATE utf8_general_ci;
- لتغيير ترميز الجداول قم بتكرار هذه الامر مع كل جدول:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
- لتغيير ترميز الحقول قم بتكرار هذه الامر مع كل الاعمدة:
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");
?>
تحياتي لكم ودمتم بود