النتائج 1 إلى 8 من 8

الموضوع: تغيير ترميز قاعدة بيانات الى utf8 بسهولة

  1. #1
    عضو فعال
    تاريخ التسجيل
    Jul 2008
    المشاركات
    1,516

    تغيير ترميز قاعدة بيانات الى 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 لم يتيح لي هذه العملية.

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





    التعديل الأخير تم بواسطة massalha ; 07-01-2009 الساعة 04:39 PM
    __________________
    أحب سوالف ولا احب الجدليين!
    اسماء اولاد وبنات http://muslim-names.us
    1000 مزاد http://1000mazad.com
    موقع نكت سعوديةhttp://arab-jokes.net


  2. #2
    عضو فعال جدا
    تاريخ التسجيل
    Oct 2003
    المشاركات
    2,775


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

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

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

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





    __________________
    a l g a r e e m

  3. #3
    عضو فعال
    تاريخ التسجيل
    Jul 2008
    المشاركات
    1,516


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

    مثال صغير من عملي اليومي:
    تبدأ بتنصيب "جمله" بواسطة 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

  4. #4
    عضو نشيط
    تاريخ التسجيل
    Jan 2008
    المشاركات
    164


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





    __________________
    مدونة شخصية: عمر الدليمي
    راسلني
    أنصح بإستخدام "أوبونتو"

  5. #5
    عضو فعال
    تاريخ التسجيل
    Jul 2008
    المشاركات
    1,516

    هل هذا يعني صعوبة في الفهم



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

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

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

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

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

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

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

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





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

  6. #6


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





    __________________
    السيف أصدق أنباء من الكتب

  7. #7
    عضو نشيط جدا
    تاريخ التسجيل
    Aug 2007
    المشاركات
    597


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

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






  8. #8
    عضو فعال
    تاريخ التسجيل
    Jul 2008
    المشاركات
    1,516


    لمن لديه اتصال 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 ...





    التعديل الأخير تم بواسطة massalha ; 11-01-2009 الساعة 01:20 PM
    __________________
    أحب سوالف ولا احب الجدليين!
    اسماء اولاد وبنات http://muslim-names.us
    1000 مزاد http://1000mazad.com
    موقع نكت سعوديةhttp://arab-jokes.net





ضوابط المشاركة

  • لا تستطيع إضافة مواضيع جديدة
  • لا تستطيع الرد على المواضيع
  • لا تستطيع إرفاق ملفات
  • لا تستطيع تعديل مشاركاتك
  •  

أضف موقعك هنا| اخبار السيارات | حراج | شقق للايجار في الكويت | بيوت للبيع في الكويت | دليل الكويت العقاري | مقروء | شركة كشف تسربات المياه | شركة عزل اسطح بالرياض | عزل فوم بالرياض| عزل اسطح بالرياض | كشف تسربات المياة بالرياض | شركة عزل اسطح بالرياض