مشاهده دست آورد نظرسنجی: اين تاپيك مناسب است؟

رای دهنده
96. شما نمی توانید در این رای گیری رای بدهید
  • بله

    93 96.88%
  • خير

    3 3.13%
نمایش نتایج 1 تا 40 از 224

نام تاپیک: snippet های php

Threaded View

پست قبلی پست قبلی   پست بعدی پست بعدی
  1. #8

    نقل قول: snippet های php

    تبدیل دیتابیس غیر Unicode به Unicode بصورت خودکار
    امروز دیدم یکی از دوستان مشکلی توی نمایش حروف فارسی ذخیره شده توی دیتابیس داشت که با راهنمایی که کردیم، اطلاعات جدید رو تونست به درستی ذخیره کنه ولی اطلاعات قبلی که توی دیتابیس داشت، چون یونیکد ذخیره نشده بود، همچنان بهم ریخته ظاهر میشد. گفتم بشینم یک Converter بنویسم که به راحتی دیتابیسهای غیر یونیکد رو تبدیل به یونیکد میکنه. اینم از کد:

    <!doctype html>
    <html>
    <head>
    <title>DB Conversion to UTF-8</title>
    <meta charset="utf-8"/>
    </head>
    <body>
    <?php

    // Prevent script time-out error
    set_time_limit(0);

    define('HOST', 'localhost'); // Your MySQL host name
    define('NAME', 'newbarnamenevis'); // Your database name
    define('PASS', 'barnamenevis'); // Your MySQL password
    define('USER', 'root'); // Your MySQL username

    // Extract tables of a database
    $tables = array();

    // Connect to DBMS
    mysql_connect(HOST, USER, PASS) or die('Connection error');
    mysql_select_db(NAME) or die('Database error');

    // Extract table names
    $result = mysql_query('SHOW TABLES');
    if($result && mysql_num_rows($result) > 0) {
    while($row = mysql_fetch_row($result)) {
    $tables[$row[0]] = array(
    'query' => '',
    'values' => array(),
    );
    }
    mysql_free_result($result);
    }

    // Create each table's utf-8 create query and extract current values
    foreach($tables as $name => $table) {
    $result = mysql_query('SHOW CREATE TABLE `' . $name . '`');
    if($result && mysql_num_rows($result)) {
    $row = mysql_fetch_row($result);
    $query = $row[1];
    if(preg_match('#(default charset)=([^\s]+)#i', $query)) {
    $query = preg_replace('#(default charset)=([^\s]+)#i', '$1=utf8', $query);
    }
    else {
    $query .= ' DEFAULT CHARSET=utf8';
    }
    if(preg_match('#(collate)=([^\s]+)#i', $query)) {
    $query = preg_replace('#(collate)=([^\s]+)#i', '$1=utf8_bin', $query);
    }
    else {
    $query .= ' COLLATE=utf8_bin';
    }
    $tables[$name]['query'] = $query;
    mysql_free_result($result);
    }
    $result = mysql_query('SELECT * FROM `' . $name . '`');
    if($result && mysql_num_rows($result) > 0) {
    $i = 0;
    while($row = mysql_fetch_row($result)) {
    $tables[$name]['values'][$i] = array();
    foreach($row as $item) {
    $tables[$name]['values'][$i][] = $item;
    }
    $i++;
    }
    mysql_free_result($result);
    }
    }

    // Now switch to utf-8 encoding
    mysql_query('SET NAMES \'utf8\'');

    // Drop old tables, create new utf-8 tables and store values into new tables
    foreach($tables as $name => $table) {
    echo '<p>TABLE: `' . $name;
    mysql_query('DROP TABLE IF EXISTS `' . $name . '`');
    mysql_query($table['query']);
    if(count($table['values']) > 0) {
    foreach($table['values'] as $value) {
    $query = 'INSERT INTO `' . $name . '` VALUES (';
    foreach($value as $item) {
    $query .= '\'' . $item . '\',';
    }
    $query = mb_substr($query, 0, -1, 'utf-8') . ')';
    mysql_query($query);
    }
    }
    echo $name . '` DONE.</p>' . PHP_EOL;
    }
    ?>
    </body>
    </html>

    فایل رو هم ضمیمه کردم. فقط قبلش 4 تا define اول اسکریپت رو با اطلاعات دیتابیس خودتون تنظیم کنید.
    روش کارش هم جالبه:
    1- استخراج تمام جدولهای توی دیتابیس
    2- استخراج کوئری ساخت جداول
    3- جایگزینی Collation با utf-8
    4- استخراج تمام اطلاعات جداول با کدگذاری قبلی
    5- حذف تمام جداول
    6- ساخت جداول با همون ساختار قبلی ولی با کدگذاری یونیکد
    7- درج مقادیر قبلی توی جدول جدید با کدگذاری یونیکد
    اگه سؤالی بود در خدمتم.
    فایل های ضمیمه فایل های ضمیمه

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •