المحتوى
السلام عليكم و رحمة الله تعالى وبركاته.
إخواني أخواتي، مرحبا بكم في أول درس من الدروس البرمجية الموجزة على درب النجاح، الفضاء التعليمي الذي يسلط الضوء في بداياته على أهم المشاكل التي يواجهها مبرمجي الويب في الوطن العربي.
بما أننا بدأنا بدورة عملية لتعلم إنشاء برنامج إدارة المبيعات على الويب بلغة PHP و قاعدة البيانات من نوع MySQL، سنواكب هذه الدورة العملية إن شاء الله بمجموعة من الدروس الموجزة ذات الصلة بالموضوع.
وقد اخترنا في هذا الدرس الأول أن نقدم الحل الأبسط لمشكال الترميز في قواعد البيانات MySQL و خاصة عندما نتحدث عن اللغة العربية، بحيث أن هذا المشكل يواجه جل مبرمجي الويب العرب في البداية.
عندما نقوم بعرض بيانات مكتوبة باللغة العربية من قاعدة البيانات MySQL ونتفاجأ بظهور رموز و علامات استفهام، المشكل في هاته الحالة هو عدم تعرف المتصفح على نوعية الترميز أو أن هاته البيانات لم يتم حفظها بطريقة صحيحة في قاعدة البيانات.
إنشاء قاعدة البيانات بترميز عام
لتفادي هذا المشكل منذ البداية، يجب علينا أن نتصرف على هذا النحو:
CREATE DATABASE database_name DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
هكذا يطبق الترميز العام على الجداول والحقول فيصبح الترميز بالنسبة للجداول و الحقول عاما utf8_general_ci.
تعديل ترميز قاعدة بيانات موجودة مسبقا
هذه الإجراءات تطبق لحظة إنشاء قاعدة البيانات، أما إذا كانت لدينا قاعدة بيانات أنشأت مسبقا بترميز مختلف، ففي هذه الحالة يمكننا تغيير ترميزها كالتالي:
كل هذه العمليات يمكننا تطبيقها من خلال الاستعلامات 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 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 لحظة إنشاء قاعدة البيانات، لكي يطبق الترميز العام على كل الجداول وحقولها فترث بذلك الترميز من قاعدة البيانات.
أسأل الله العلي القدير أن يوفقنا لما يحب ويرضى..
أنار الله دربكم و بالإيمان ملأ قلوبكم و السلام عليكم.