شوّيت: شبكة كرة قدم اجتماعية




العودة   سوالف سوفت > سوالف برمجة المواقع وتطويرها > الويب والويب 2.0 والـ Semantic Web
التسجيل المدوّنات البحث مشاركات اليوم جعل الأقسام مقروءة

الرد على الموضوع
 
LinkBack أدوات الموضوع
عضو فعال
#1  
تغيير ترميز قاعدة بيانات الى utf8 بسهولة

السلام عليكم.

توضيح: مثال لتحويل قاعدة بيانات فارغة بنيت ب latin1 الى utf8 لكي تدعم كتابة العربية فيما بعد
وليس لتحويل العربية التي كتبت اصلاً بترميز آخر.

أليوم كان يتوجب علي تغيير ترميز قاعدة بيانات الى الترميز العالمي utf8 - عادة أفعل التالي:
من phpmyadmin اعمل تصدير export مع امكانية Drop tables if exists - اذهب الى اي برنامج معالجة نصوص متطور - واستبدل default charset = latin1 الى default charset = utf8
أو اذا كانت المهمة مجرد لائحة واحدة فأقوم بعمل التالي
كود:
ALTER TABLE `tableName` CONVERT TO CHARACTER SET `utf8`;
اليوم قلت - كفى - يجب أن أنظم هذا الأمر - فأعددت هذا الكود الصغير.
كود:
<html dir="rtl">
<body>
<?php 
// هذا السكريبت يساعد بتحويل الترميز الى ترميز عالمي
// utf8
// انتبه - فبإستعماله يمكنك ان تغير بعض المعطيات. ينصح استعماله فقط قبل بدء ادخال المعطيات.
// مرة ثانية - استعمل هذا السكريبت قبل البدء بكتابة العربية وليس بعدها!!!! 
// فهو لا يحول النص فعلياً بل فقط يعلم السيرفر أن الترميز هو يو تي اف 8
// كاتب السكريبت: شادي مصالحه - ولا - لن أرد على اسئلة اضافية - شكراً لكم

$hostname= "localhost";  
$database= "your_database_name";

$username= "root_or_your_username";
$password= "your_password";

$dbs = mysql_pconnect($hostname, $username, $password) or trigger_error(mysql_error(),E_USER_ERROR); 
mysql_select_db($database, $dbs);

function q($query){
	global $dbs;
	echo "تغيير الاستعلام : ".$query."<br>";
	 $result = mysql_query($query,$dbs);
		if (!$result) {
		    die('Invalid query: ' . mysql_error());
	}
}


 $tables = mysql_list_tables($database);
 $count = 0;

	q("ALTER DATABASE CHARACTER SET `utf8` COLLATE `utf8_general_ci`; \r\n");
	
   while ($count < mysql_numrows($tables)) {
	 $tableName=mysql_tablename($tables,$count);
     $convertQuery='ALTER TABLE `'.$tableName.'` CONVERT TO CHARACTER SET `utf8`;';
	 q($convertQuery);
	 $count++;
   }
?>
</body></html>
لكن انتبهوا - انصح بإستعماله "على النظيف" - لأن بعض النصوص قد تتغير بهذه الطريقة.

وايضاً - أنا لم أجربه بنطاق واسع - اذ لا اعلم اذا كانت هناك اضرار أخرى منه.

وايضاً - ليس للكل يوجد امكانية تشغيل الأمر Alter حتى على قاعدة بياناتهم هم.

خبرتي توقفت عند سؤال محدد - يا ريت حد يقدر يعرف ليش - أنني عندما جربت ان أدمج كل الأوامر بجملة استعلامية واحدة - لم أنجح. أي بدل أن أنفذ كل سطر Alter على حدة - حاولت جمع كل الأوامر بسطر واحد لكن ال mysql لم يتيح لي هذه العملية.

أتمنى ان يفيدكم.






__________________
أحب سوالف ولا احب الجدليين!
اسماء اولاد وبنات http://muslim-names.us
1000 مزاد http://1000mazad.com
موقع نكت سعوديةhttp://arab-jokes.net

آخر تعديل بواسطة massalha في 07-01-2009 الساعة 03:39 PM.
massalha is online now   قديم 06-01-2009, 12:44 PM
الرد مع إقتباس
عضو فعال جدا
#2  

أولا اشكرك على هذه الخدمة و العمل المبذول في إنشاء هذا السكربت .
و لكن الترميز ليس مجرد تحويل الخيار من latin إلى utf-8
بل يجب تحويل الرموز او البيانات نفسها إلى هذا الترميز
يمكن عن طريق مكتبة Iconv

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

مثلا هذه الصفحة ، قم تحويل الترميز إلى Windows-1256
ستظهر برموز غريبة و هي نفس الحال مع طريقتك ، فأنت تامر القاعدة بان هذه البيانات هي يونيكود و لكنها ليست كذلك .

أتمنى ان الفكرة وصلت .






__________________
Algareem.Com
Creative Designs
LayeredPoint.Com
Warez Hosting
===
UAE - FTP WareZServer
العنوان : ftp://guests.arabcream.com:8822
الغريم دوت كوم is offline   قديم 06-01-2009, 03:14 PM
الرد مع إقتباس
عضو فعال
#3  

نعم - لهذا نبهت على استعمالها قبل البدء في العمل.

مثال صغير من عملي اليومي:
تبدأ بتنصيب "جمله" بواسطة cPanel Fantastico ... ويكون سيرفرك يستعمل latin1 بشكل افتراضي.
فأول ما تكتب العربية - سيظهر لك أنك ادخلت ؟؟؟؟؟؟ بدل اي كلمة عربية.

لذا - فائدة هذا السكريبت فقط قبل البدء في العمل.

أما في حال لديك قاعدة بيانات بالعربية - فعليك استعمال الطريقة الأولى التي ذكرتها -
وهي Export and then Import after you replace the LATIN1 to UTF8 with DROP IF EXISTS enabled

فائدة السكريبت الذي وضعته هو كمحطة أولى.
الأفضل الاتصال بمضيفك وطلب منه اضافة هذا السطر الى ملف my.cfg / my.ini
default-character-set=utf8
وبهذا تريح رأسك من هذه الدوامة.






__________________
أحب سوالف ولا احب الجدليين!
اسماء اولاد وبنات http://muslim-names.us
1000 مزاد http://1000mazad.com
موقع نكت سعوديةhttp://arab-jokes.net
massalha is online now   قديم 06-01-2009, 03:20 PM
الرد مع إقتباس
عضو نشيط
#4  

أرجوا أن لا تكون هذه مزحة فالأمر يتعدى ذلك بكثير! <<
يجب أن تغير ترميز الحروف العربية. بواسطة iconv أو غيره!






__________________
مدونة شخصية: عمر الدليمي
راسلني
أنصح بإستخدام "أوبونتو"
عمر الدليمي is offline   قديم 06-01-2009, 04:00 PM
الرد مع إقتباس
عضو فعال
#5  
هل هذا يعني صعوبة في الفهم

إقتباس:
المشاركة الأصلية بواسطة عمر الدليمي مشاهدة مشاركة
أرجوا أن لا تكون هذه مزحة فالأمر يتعدى ذلك بكثير! <<
يجب أن تغير ترميز الحروف العربية. بواسطة iconv أو غيره!

هل لديك صعوبة في الفهم أو ما شابه؟

هذا مثال لتغيير ترميز قواعد البيانات الى utf8 - ليستقبل العربية بعدها.

وليس مثال لتحويل العربية الى utf8.

اقرأ المعلومة أولاً - ومن ثم زد ما شئت من الوجوه الضاحكة. بمرآتك.

للذين يريدون تحويل العربية الى ترميز utf8 ذكرت الطرق الأخرى.

ببساطة - أنت مثال لماذا يجب على كل شخص أن يبقي معلوماته لنفسه.

لا أدري إن كتبت مرة شئ يفيد العامة - ولكن أكيد أنك استهترت بمن يحاول الكتابة.






__________________
أحب سوالف ولا احب الجدليين!
اسماء اولاد وبنات http://muslim-names.us
1000 مزاد http://1000mazad.com
موقع نكت سعوديةhttp://arab-jokes.net
massalha is online now   قديم 06-01-2009, 04:45 PM
الرد مع إقتباس
عضو مميز
#6  

وضح للأخوة أخي حتي لا يخطئوا فقد دخلت أوضح لك وتبين أنك تقصد تغيير الجداول فقط
فلتحويل الترميز ممكن زيادة بسيطة في كودك بال iconv






محب الله ورسوله is online now   قديم 06-01-2009, 07:38 PM
الرد مع إقتباس
عضو سوبر نشيط
#7  

هذي تحويل ترميز القاعدة .. لكن محتويات القاعدة رح تبقى بترميز مختلف .. يعني المدخلات القديمة يجب تحويل ترميزها عن طريق موديل iconv

شكرا لك على الموضوع






Jo Live is offline   قديم 07-01-2009, 11:16 AM
الرد مع إقتباس
عضو فعال
#8  

لمن لديه اتصال SSH بسيرفره يمكنه فعل التالي اذا لم يرد استعمال الكود ...
كود:
mysqldump --user=username --password=password --default-character-set=latin1 --skip-set-charset dbname > dump.sql
chgrep latin1 utf8 dump.sql
mysql --user=username --password=password --execute="DROP DATABASE dbname; CREATE DATABASE dbname CHARACTER SET utf8 COLLATE utf8_general_ci;"
mysql --user=username --password=password --default-character-set=utf8 dbname < dump.sql
السطر الأول يقوم بحفظ القاعدة بالملف dump.sql
السطر الثاني يقوم باستبدال latin1 ب utf8 من الملف dump.sql
السطر الثالث يمحو القاعدة ويركبها من جديد بالترميز المطلوب.
السطر الرابع يرجع المعطيات الى قاعدة البيانات الجديدة.

ومن لا تعمل لديه الدالة chgrep يمكنه استعمال بدلها
كود:
sed -i  's/latin1/utf8/g' dump.sql
بالطبع - يمكنك استعمال اي ترميز آخر بدل ال utf8

ومرة أخرى - مرة أخرى - هذا الكود فعال 100% قبل البدء بالعمل بقاعدة البيانات ...

طريقة سريعة ... ولكن المشكلة أن للقلة فقط الذين يملكون امكانية الاتصال ب ssh ...






__________________
أحب سوالف ولا احب الجدليين!
اسماء اولاد وبنات http://muslim-names.us
1000 مزاد http://1000mazad.com
موقع نكت سعوديةhttp://arab-jokes.net

آخر تعديل بواسطة massalha في 11-01-2009 الساعة 12:20 PM.
massalha is online now   قديم 11-01-2009, 12:14 PM
الرد مع إقتباس
الرد على الموضوع


 

أدوات الموضوع

قوانين المشاركات
لا يمكنك كتابة مواضيع جديدة
يمكنك إضافة ردود
لا يمكنك إرسال مرفقات
لا يمكنك تعديل مشاركاتك

كود vB متاح
كود [IMG] متاح
كود HTML غير متاح
Trackbacks are متاح
Pingbacks are متاح
Refbacks are متاح


المواضيع المشابهه
الموضوع كاتب الموضوع القسم الردود آخر مشاركة
طريقة تحويل قاعدة بيانات الى ترميز UTF-8 بكل سهوله 4arab.net الويب والويب 2.0 والـ Semantic Web 20 16-05-2010 05:53 PM
هل من حل عملي لتغيير ترميز قاعدة البيانات الى UTF8 الحضرمي الويب والويب 2.0 والـ Semantic Web 2 27-05-2008 08:01 PM
ممكن المساعده في تعديل ترميز من UTF8 الى ترميز لغه عربيه إبراهيم PHP 3 22-03-2008 06:07 AM
تغيير ترميز جدول معين في قاعدة بيانات أحمد.الغامدي الإصلاح والصيانة 15 25-09-2007 08:45 AM
اريد تحويل قاعدة بيانات الى ترميز UTF-8 سبعات الويب والويب 2.0 والـ Semantic Web 11 26-05-2007 08:26 PM


جميع الأوقات بتوقيت غرينتش +3. الوقت الآن هو 02:54 PM.