السلام عليكم.
توضيح: مثال لتحويل قاعدة بيانات فارغة بنيت ب 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 لم يتيح لي هذه العملية.
أتمنى ان يفيدكم.