You are here
اثنين, 2006-06-26 02:53
#1
تغيير ترميز قاعدة بيانات؟؟
مرحبا
واجهتني مشكلة عند محاولة إصلاح أحد المواقع
فبعد أن قمت بتصدير قاعدة البيانات و فيها أكثر من 500 مقالة و أعضاء و ...
كان الترميز المستخدم هو
CHARACTER SET utf8 COLLATE utf8_swedish_ci;
و لذلك صارت الكتابة من الشكل
?‡?????‡?†?£?‰ ?‡???“?¦???‡?
هل هناك طريقة لإعادة المحتويات إلى الترميز windows-1256 ؟
شكرا Taxonomy upgrade extras:







تحصل هذه المشكلة عند تصدير قاعدة بيانات MySQL 4.1 وما بعده، وهنا يجب التأكد من أمرين أساسيين:
1- هل ملف SQL قابل للقراءة، يعني إذا فتحت ملف SQL فهل تستطيع قراءة النصوص فيه؟
2- بعد الاستيراد هل يمكن قراءة النصوص من القاعدة نفسها، وليس من التطبيق.
إذا كان من الممكن قراءة النصوص في ملف SQL فمن الممكن تغيير الترميز لكل الجداول بتعليمة Replace All واحدة، وإذا لم يكن من الممكن قراءة النصوص، فالمشكلة تأتي من القاعدة القديمة نفسها وليس من عملية التصدير، وقد تكون نشأت أصلا من إنشاء القاعدة أو تخزين البيانات فيها. وهنا نحتاج إلى معلومات إضافية حول المشكلة لتحديد الحل.
شكرا لك أستاذ الأيهم على الرد
لا ملف ال SQL غير ممكن قراءته لأن الرموز التي ذكرتها فيه و ليس في التطبيق
و بعد الاستيراد نفس الشيء لا يمكن قراءة النصوص لا في القاعدة ولا في التطبيق.
ما هي المعلومات الإضافية التي ممكن أن تساعد في حل المشكلة؟
حاول تنفيذ الأمر التالي على قاعدة البيانات الأصلية:
mysqldump -u [your user name] -p --opt [dbname] > [filename.sql]
سيولد لك هذا الأمر ملف sql يفترض أن يكون مطابقا للمعلومات المخزنة في الجداول، وبذلك تتجنب أية أخطاء قد يرتكبها برنامج التصدير الذي تستخدمه. افتح الملف الجديد وتأكد أنه قابل للقراءة.
تجد البرنامج mysqldump في مجلد البرامج التنفيذية ل Mysql، وهو عادة /usr/bin أو c:\mysql\bin
جربت و لم أنجح ، لا أظن أن المشكلة في التصدير ف قاعدة البيانات على السيرفر قبل التصدير لا يمكن قراءتها.
و لكن كما كتبت أنت في مقالة سابقة عن قراءة الرسائل التي تصل بترميز يونيكود ، هل يمكن تحويل الكتابات الموجودة في قاعدة البيانات إلى الترميز windows-1256
في تطبيق ال PHP الكتابة واضحة ولا يوجد مشاكل.
هل ممكن تحويل كلمات مثل هذه ?£?‰ ?‡???“?¦???‡? إلى كلمات مفهومة بطريقة ما؟؟؟
شكرا
كيف يعني جربت ولم تنجح
هل كان الملف المصدر مباشرة قابلا للقراءة أم لا؟
آسف على عدم التوضيح
قاعدة البيانات تصدّرت و لكنها كانت خالية.
لا تحوي شيء حجمها 0
أنا استخدمت التالي:
$dbhost="localhost";
$dbuser="salam";
$dbpass="1234";
$dbname="bbs";
$backup="bbs.sql";
و بعدها وضعت المتحولات في التعليمة التالية:
$command="mysqldump -u $dbuser -p $dbpass --opt $dbname > $backup";
ثم قمت بتنفيذه:
system($command);
و عند تشغيل الملف تم توليد قاعدة البيانات و لكنها كانت فارغة.
ما هو السبب هل يوجد نقص فيما كتبته؟؟
مرحبا سلام
هل حلت المشكلة؟ إذا كان نعم!!! فكيف؟
أهلين
المشكلة حليتها بس مو بهالطريقة.
يعني كنت مستعجل لذلك عملت طريقة يمكن بعيدة شوية عن المألوف بس رح أكتبها بالتفصيل هون.
المشكلة انحلّت معي بطريقتين الأولى خاصة و التانية ممكن تكون عامة :
1- الحل الأول هو أن الموقع يعتمد على نظام مفتوح المصدر و من خلال لوحة التحكم الخاصة بالموقع يوجد خيار backup و هو يأخذ نسخة احتياطية و تكون الكتابة باللغة العربية صحيحة لأن البرنامج يقرأ من قاعدة البيانات دون أخطاء.
2- الحل الثاني الذي جربته هو الاستعلام من قاعدة البيانات الحالية و إضافة الإستعلامات إلى ملف مستقل و لكن بشكل يجعل محتوى الملف مشابه تماما لملف ال sql الأصل كما يلي :
مثلا ليكن الجدول التالي أحد جداول قاعدة بيانات و اسمه t1 .
CREATE TABLE `articles` (
`art_id` smallint(5) unsigned NOT NULL auto_increment,
`art_cat` smallint(5) unsigned NOT NULL default '0',
`art_subject` varchar(200) NOT NULL default '',
`art_article` text NOT NULL,
PRIMARY KEY (`art_id`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;
نستخرج بعض المحتويات منه و نقوم بإضافتها إلى ملف مثلا:
$query=mysql_query("
select art_id,art_cat,art_subject,art_article limit 0,10
");
/////////////////////////////
$i=0;
$fileopen=fopen("filey.sql","a");
while ($i<10){
$art_id=mysql_result($query,$i,"art_id");
$art_cat=mysql_result($query,$i,"art_cat");
$art_subject=mysql_result($query,$i,"art_subject");
$art_article=mysql_result($query,$i,"art_article");
$str ="INSERT INTO `articles` VALUES (";
$str.=$art_id.",";
$str.=$art_cat.",'";
$str.=$art_subject."','";
$str.=$art_article;
$str.=");";
$filewrite=fwrite($fileopen,$str."\n");
$i++;
}
fclose($fileopen);
و طبعا كل هذا بعد الاتصال الناجح بقاعدة البيانات.
يمكن الطريقة غبية بس كنت مضطر و مشي حالي
تم التحرير لوضع & l t ; بدلا من إشارة الأصغر
[ تم تحريره بواسطة salam on 26/6/2006 ]