الأخ besho وفقك الله لكل خير
أشكرك على تشريفك للموضوع وكم تمنيت أن تقرأ ماكتبت حتى يعم الموضوع بالنقاش العلمي من شخص بمكانتك أيها الأخ الكريم ولكن سأختصر لكم الطريق بما أن هناك كثير من الاخوان يطالب بمسألة التحويل.
سأذكر لك إحدى الطرق في التحويل.
الان وحسب ماقرأنا في الموضوع هناك 4 طبقات داخليه و3 طبقات خارجيه.
الطبقات الداخليه ترتيبها كالتالي:
خادم ------> قاعده -----> جدول -------> حقل
لذلك إذا أردت أن تقوم بالتحويل يجب عليك العمل من الأعلى الى الأسفل
بمعنى أوضح أن نقوم أولاً بتحويل ترميز طبقة الحقل وبعده ترميز طبقة الجدول وبعده ترميز طبقة القاعده واخيراً ترميز طبقة الخادم.
ترميز طبقة الخادم أمره سهل وقد ذكرنا هذا في أول الموضوع بأن نستخدم الجمله التاليه عند الإتصال:
كود HTML:
set character_set_server='cp1256';
أما الطبقات الخارجيه الثلاثه كلها فأمرها سهل أيضاً ونستخدم الجمله التاليه عند الإتصال:
كود HTML:
set names cp1256;
باقي الطبقات الداخليه الثلاثه وهي مرتبه كالتالي:
حقل ----> جدول -----> قاعده
أولا: طبقة الحقل
الان حتى نبدأ بتحويل ترميز حقل من الحقول يجب أن يكون هذا الحقل ذو بيانات نصيه ؟
بمعنى أن يكون الحقل أحد الأنواع التاليه:
set
enum
char
varchar
text
mediumtext
longtext
وهذه الأنواع يجب تحويلها إلى صيغه ثنائيه ( binary ) وكما تعلم هناك انواع للحقول الثنائيه في الـ mysql وهي كالتالي:
binary
varbinary
blob
mediumblob
longblob
لذلك يحول كل نوع حقل من الحقول النصيه حسب التسلسل التالي:
كود:
set ----------------> blob
enum -------------> blob
char --------------> binary
varchar ----------> varbinary
text --------------> blob
mediumtext -----> mediumblob
longtext ---------> longblob
لتفاصيل أكثر عن الحقول النصيه في الـ Mysql أدخل على الرابط التالي:
http://dev.mysql.com/doc/refman/4.1/...-overview.html
لنفرض على سبيل المثال لدينا حقل إسمه f1 ونوعه char ومقاسه 10
نقوم بتحويل ترميزه حسب الأمرين التاليه:
كود HTML:
ALTER TABLE `table` CHANGE f1 f1 binary(10);
ALTER TABLE `table` CHANGE f1 f1 char(10) CHARACTER SET cp1256;
يجب التركيز على مسألة المقاس ولا تهملها ولاحظ في المثال السابق أنني حولت 10 الى 10.
السؤال المهم الان:
ماذا لو كانت الجداول في قاعدة بياناتك بها أكثر من حقل نصي فكيف ستتعامل مع هذا الكم منها ؟
بصراحه وبكل وضوح يجب عليك التعامل معها كلها أولاً 
ثانياً : طبقة الجدول
بعد الانتهاء من تحويل ترميز الحقول النصيه كلها في أي جدول تقوم بتحويل ترميز الجدول حسب الأمر التالي:
كود HTML:
ALTER TABLE `table` DEFAULT CHARACTER SET cp1256
يالله كم هو سهل جداً تحويل ترميز الجدول
اسهل بكثير من طبقة الحقول :anger2:
ثالثاً: طبقة القاعده
بعد الانتهاء من تحويل ترميز الجداول كلها تقوم بتحويل ترميز القاعده حسب الأمر التالي:
كود HTML:
ALTER DATABASE `db` DEFAULT CHARACTER SET cp1256
أيضاً سهل تحويلها 
يعني التعقيد كله في طبقة الحقل 
أعتقد ستتسائل هل هناك طريقه أسرع وأسهل؟؟
الجواب نعم هناك طريقه أسرع بأمر mysqldump وهي نفس الطريقه التي شرحتها بالسابق للأخوان المستضيفين أو أصحاب الخوادم الخاصه ولكن بالنسبه للعميل فلا يوجد لدي إلا هذه الطريقه المعقده
.
عيوب الطريقه السابقه:
1- لا يمكن التحويل الى ترميز اليونيكوود utf8 أو ucs2 أو العكس ( من واقع تجربه ) .
2- إذا كان السرفر يعمل على الـ safemode سوف تفشل طريقة التحويل لأن أقصى وقت محدد لتنفيذ عمليات الـ php هو 30 ثانيه.
قمت ببرمجة سكربت بالـ php يقوم هذا السكربت بأخذ جداول قاعدة بيانات تحددها له وبعدها يبدأ هذا السكربت بأخذ كل جدول وجمع كل حقوله وبعدها يقوم بتحويل هذه الحقول واحداً تلو الآخر بطريقه تلقائيه وبعد أن ينتهي من تحويل الحقول يقوم بتحويل ترميز الجدول ويبدأ بعدها بالجدول التالي وهكذا حتى ينتهي من كل الجداول وبعدها ينتهي بتحويل ترميز قاعدة البيانات.
السكربت بالمرفق .
ملاحظه مهمه جداً قبل الإستخدام:
خذ نسخه إحتياطيه قبل القيام بتنفيذ السكربت.
ملاحظه مهمه جداً بعد الإستخدام:
بعد نجاح عملية التحويل يجب عليك إرسال الأوامر التاليه في كل إتصال بالقاعده:
كود HTML:
set character_set_server='cp1256';
set names cp1256;
الأخ سورية
بعد الإتصال بالقاعده يجب أن تستخدم الأمرين التاليه في البدايه:
كود HTML:
set character_set_server='cp1256';
set names cp1256;
وأي سؤال في السكربت أو في الطريقه المعقده أنا حاضر.