it-swarm-tr.com

Tüm tabloları ve alanları MYSQL'de utf-8 bin harmanlamasına değiştiren bir betik

Bir veritabanındaki tüm tablolarda ve alanlardaki varsayılan harmanlamayı değiştirecek şekilde çalıştırabileceğim bir SQL veya PHP betiği var mı?

Kendim yazabilirim, ancak bunun böyle bir sitede kolayca bulunabilecek bir şey olması gerektiğini düşünüyorum. Biri bir tane göndermeden önce bir tane bulabilirsem, kendim gönderirim.

55
nlaq

Dikkatli ol! Eğer gerçekten başka bir kodlama olarak kaydedilmiş utf varsa, elinizde gerçek bir karışıklık olabilir. İlk önce yedekle. Ardından standart yöntemlerden bazılarını deneyin:

örneğin http://www.cesspit.net/drupal/node/898http://www.hackszine.com/blog/archive/2007/05/mysql_database_migration_latin.html

Tüm metin alanlarını ikiliye, sonra da varchar/text'e dönüştürmeye başvurmak zorunda kaldım. Bu kıçımı kurtardı. 

Latince1 olarak depolanan verinin UTF8 olduğunu gördüm. Ben ne yaptım:

Bırakma dizinleri . Alanları ikiliye dönüştür . Utf8-general ci'ye dönüştür.

LAMP'ınız açıksa, db ile etkileşim kurmadan önce NAMES set komutunu eklemeyi unutmayın ve karakter kodlama başlıklarını ayarladığınızdan emin olun. 

24
Buzz

Tek bir komutla yapılabilir (PHP'nin 148'ı değil):

mysql --database=dbname -B -N -e "SHOW TABLES" \
| awk '{print "SET foreign_key_checks = 0; ALTER TABLE", $1, "CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; SET foreign_key_checks = 1; "}' \
| mysql --database=dbname &

.... komut satırına bayılmalısınız. ((mysql için --user ve --password seçeneklerini kullanmanız gerekebilir).

EDIT: yabancı anahtar sorunlarından kaçınmak için SET foreign_key_checks = 0; ve SET foreign_key_checks = 1; eklenir

85

PhpMyAdmin'in iki adımda bunu yapmasının kolay olduğunu düşünüyorum.
Aşama 1:  

SELECT CONCAT('ALTER TABLE `', t.`TABLE_SCHEMA`, '`.`', t.`TABLE_NAME`,
 '` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;') as stmt 
FROM `information_schema`.`TABLES` t
WHERE 1
AND t.`TABLE_SCHEMA` = 'database_name'
ORDER BY 1

Adım 2:
Bu sorgu, her tablo için bir sorgu listesi verecektir. Sorguların listesini kopyalayıp, komut satırına ya da yapılacak değişiklikler için PhpMyAdmin'in SQL sekmesine yapıştırmanız gerekir.

39
Ivan

Tamam, bunu, bu başlıkta söylenenleri dikkate alarak yazdım. Yardımın için teşekkürler ve umarım bu senaryo başkalarına yardım eder. Kullanımı için herhangi bir garantim yok, bu yüzden çalıştırmadan önce YEDEKLEME LÜTFEN. Bu gerekir tüm veritabanlarıyla çalışmalı; ve kendi başıma harika çalıştı.

EDIT: Eklenen, karakter kümesi/harman dönüştürmek için en üste .. değişkenleri eklenir.

<?php

function MysqlError()
{
    if (mysql_errno())
    {
        echo "<b>Mysql Error: " . mysql_error() . "</b>\n";
    }
}

$username = "root";
$password = "";
$db = "database";
$Host = "localhost";

$target_charset = "utf8";
$target_collate = "utf8_general_ci";

echo "<pre>";

$conn = mysql_connect($Host, $username, $password);
mysql_select_db($db, $conn);

$tabs = array();
$res = mysql_query("SHOW TABLES");
MysqlError();
while (($row = mysql_fetch_row($res)) != null)
{
    $tabs[] = $row[0];
}

// now, fix tables
foreach ($tabs as $tab)
{
    $res = mysql_query("show index from {$tab}");
    MysqlError();
    $indicies = array();

    while (($row = mysql_fetch_array($res)) != null)
    {
        if ($row[2] != "PRIMARY")
        {
            $indicies[] = array("name" => $row[2], "unique" => !($row[1] == "1"), "col" => $row[4]);
            mysql_query("ALTER TABLE {$tab} DROP INDEX {$row[2]}");
            MysqlError();
            echo "Dropped index {$row[2]}. Unique: {$row[1]}\n";
        }
    }

    $res = mysql_query("DESCRIBE {$tab}");
    MysqlError();
    while (($row = mysql_fetch_array($res)) != null)
    {
        $name = $row[0];
        $type = $row[1];
        $set = false;
        if (preg_match("/^varchar\((\d+)\)$/i", $type, $mat))
        {
            $size = $mat[1];
            mysql_query("ALTER TABLE {$tab} MODIFY {$name} VARBINARY({$size})");
            MysqlError();
            mysql_query("ALTER TABLE {$tab} MODIFY {$name} VARCHAR({$size}) CHARACTER SET {$target_charset}");
            MysqlError();
            $set = true;

            echo "Altered field {$name} on {$tab} from type {$type}\n";
        }
        else if (!strcasecmp($type, "CHAR"))
        {
            mysql_query("ALTER TABLE {$tab} MODIFY {$name} BINARY(1)");
            MysqlError();
            mysql_query("ALTER TABLE {$tab} MODIFY {$name} VARCHAR(1) CHARACTER SET {$target_charset}");
            MysqlError();
            $set = true;

            echo "Altered field {$name} on {$tab} from type {$type}\n";
        }
        else if (!strcasecmp($type, "TINYTEXT"))
        {
            mysql_query("ALTER TABLE {$tab} MODIFY {$name} TINYBLOB");
            MysqlError();
            mysql_query("ALTER TABLE {$tab} MODIFY {$name} TINYTEXT CHARACTER SET {$target_charset}");
            MysqlError();
            $set = true;

            echo "Altered field {$name} on {$tab} from type {$type}\n";
        }
        else if (!strcasecmp($type, "MEDIUMTEXT"))
        {
            mysql_query("ALTER TABLE {$tab} MODIFY {$name} MEDIUMBLOB");
            MysqlError();
            mysql_query("ALTER TABLE {$tab} MODIFY {$name} MEDIUMTEXT CHARACTER SET {$target_charset}");
            MysqlError();
            $set = true;

            echo "Altered field {$name} on {$tab} from type {$type}\n";
        }
        else if (!strcasecmp($type, "LONGTEXT"))
        {
            mysql_query("ALTER TABLE {$tab} MODIFY {$name} LONGBLOB");
            MysqlError();
            mysql_query("ALTER TABLE {$tab} MODIFY {$name} LONGTEXT CHARACTER SET {$target_charset}");
            MysqlError();
            $set = true;

            echo "Altered field {$name} on {$tab} from type {$type}\n";
        }
        else if (!strcasecmp($type, "TEXT"))
        {
            mysql_query("ALTER TABLE {$tab} MODIFY {$name} BLOB");
            MysqlError();
            mysql_query("ALTER TABLE {$tab} MODIFY {$name} TEXT CHARACTER SET {$target_charset}");
            MysqlError();
            $set = true;

            echo "Altered field {$name} on {$tab} from type {$type}\n";
        }

        if ($set)
            mysql_query("ALTER TABLE {$tab} MODIFY {$name} COLLATE {$target_collate}");
    }

    // re-build indicies..
    foreach ($indicies as $index)
    {
        if ($index["unique"])
        {
            mysql_query("CREATE UNIQUE INDEX {$index["name"]} ON {$tab} ({$index["col"]})");
            MysqlError();
        }
        else
        {
            mysql_query("CREATE INDEX {$index["name"]} ON {$tab} ({$index["col"]})");
            MysqlError();
        }

        echo "Created index {$index["name"]} on {$tab}. Unique: {$index["unique"]}\n";
    }

    // set default collate
    mysql_query("ALTER TABLE {$tab}  DEFAULT CHARACTER SET {$target_charset} COLLATE {$target_collate}");
}

// set database charset
mysql_query("ALTER DATABASE {$db} DEFAULT CHARACTER SET {$target_charset} COLLATE {$target_collate}");

mysql_close($conn);
echo "</pre>";

?>
27
nlaq

Bu PHP snippet'i, tüm tablolardaki harmanlamayı db'de değiştirir. ( Bu site 'den alınmıştır.)

<?php
// your connection
mysql_connect("localhost","root","***");
mysql_select_db("db1");

// convert code
$res = mysql_query("SHOW TABLES");
while ($row = mysql_fetch_array($res))
{
    foreach ($row as $key => $table)
    {
        mysql_query("ALTER TABLE " . $table . " CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci");
        echo $key . " =&gt; " . $table . " CONVERTED<br />";
    }
}
?> 
14
Rich Adams

awk'siz @ david'leri temel alan komut satırını kullanan başka bir yaklaşım

for t in $(mysql --user=root --password=admin  --database=DBNAME -e "show tables";);do echo "Altering" $t;mysql --user=root --password=admin --database=DBNAME -e "ALTER TABLE $t CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;";done

prettified

  for t in $(mysql --user=root --password=admin  --database=DBNAME -e "show tables";);
    do 
       echo "Altering" $t;
       mysql --user=root --password=admin --database=DBNAME -e "ALTER TABLE $t CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;";
    done
4
RameshVel

Yukarıdaki betiğin daha eksiksiz bir versiyonunu burada bulabilirsiniz:

http://www.zen-cart.com/index.php?main_page=product_contrib_info&products_id=1937

Lütfen bu katkı hakkında geri bildiriminizi buraya bırakın: http://www.zen-cart.com/forum/showthread.php?p=1034214

3
Dustin

Tüm tabloların üzerindeki komut dosyalarında dönüştürme için seçilen (SHOW TABLES ile), ancak tabloyu dönüştürmeden önce tablo harmanlamasını kontrol etmenin daha kullanışlı ve taşınabilir bir yolu. Bu sorgu yapar:

SELECT table_name
     , table_collation 
FROM information_schema.tables
1

Charset ve harmanlama aynı şey değil. Harmanlama, dizelerin nasıl sıralanacağına ilişkin bir kurallar kümesidir. Karakter kümesi, karakterlerin nasıl temsil edileceğine dair bir kurallar kümesidir. Bir harmanlama karakter grubuna bağlıdır.

1
troelskn

Özel Shell collatedb kullan, çalışması gerekir: 

collatedb <username> <password> <database> <collation>

Örnek :

collatedb root 0000 myDatabase utf8_bin
0
Abdennour TOUMI

Nlaq'ın PHP7 ile çalışabilmesi ve çok noktalı virgül indekslerini, ikili harmanlanmış verileri (örn. latin1_bin) vs. doğru şekilde işlemesini sağlamak için yanıtı güncelledim ve kodu biraz temizledim. Bu, veritabanımı latin1'den utf8'e başarıyla geçiren buldum/denediğim tek kod.

<?php

/////////// BEGIN CONFIG ////////////////////

$username = "";
$password = "";
$db = "";
$Host = "";

$target_charset = "utf8";
$target_collation = "utf8_unicode_ci";
$target_bin_collation = "utf8_bin";

///////////  END CONFIG  ////////////////////

function MySQLSafeQuery($conn, $query) {
    $res = mysqli_query($conn, $query);
    if (mysqli_errno($conn)) {
        echo "<b>Mysql Error: " . mysqli_error($conn) . "</b>\n";
        echo "<span>This query caused the above error: <i>" . $query . "</i></span>\n";
    }
    return $res;
}

function binary_typename($type) {
    $mysql_type_to_binary_type_map = array(
        "VARCHAR" => "VARBINARY",
        "CHAR" => "BINARY(1)",
        "TINYTEXT" => "TINYBLOB",
        "MEDIUMTEXT" => "MEDIUMBLOB",
        "LONGTEXT" => "LONGBLOB",
        "TEXT" => "BLOB"
    );

    $typename = "";
    if (preg_match("/^varchar\((\d+)\)$/i", $type, $mat))
        $typename = $mysql_type_to_binary_type_map["VARCHAR"] . "(" . (2*$mat[1]) . ")";
    else if (!strcasecmp($type, "CHAR"))
        $typename = $mysql_type_to_binary_type_map["CHAR"] . "(1)";
    else if (array_key_exists(strtoupper($type), $mysql_type_to_binary_type_map))
        $typename = $mysql_type_to_binary_type_map[strtoupper($type)];
    return $typename;
}

echo "<pre>";

// Connect to database
$conn = mysqli_connect($Host, $username, $password);
mysqli_select_db($conn, $db);

// Get list of tables
$tabs = array();
$query = "SHOW TABLES";
$res = MySQLSafeQuery($conn, $query);
while (($row = mysqli_fetch_row($res)) != null)
    $tabs[] = $row[0];

// Now fix tables
foreach ($tabs as $tab) {
    $res = MySQLSafeQuery($conn, "SHOW INDEX FROM `{$tab}`");
    $indicies = array();

    while (($row = mysqli_fetch_array($res)) != null) {
        if ($row[2] != "PRIMARY") {
            $append = true;
            foreach ($indicies as $index) {
                if ($index["name"] == $row[2]) {
                    $index["col"][] = $row[4];
                    $append = false;
                }
            }
            if($append)
                $indicies[] = array("name" => $row[2], "unique" => !($row[1] == "1"), "col" => array($row[4]));
        }
    }

    foreach ($indicies as $index) {
        MySQLSafeQuery($conn, "ALTER TABLE `{$tab}` DROP INDEX `{$index["name"]}`");
        echo "Dropped index {$index["name"]}. Unique: {$index["unique"]}\n";
    }

    $res = MySQLSafeQuery($conn, "SHOW FULL COLUMNS FROM `{$tab}`");
    while (($row = mysqli_fetch_array($res)) != null) {
        $name = $row[0];
        $type = $row[1];
        $current_collation = $row[2];
        $target_collation_bak = $target_collation;
        if(!strcasecmp($current_collation, "latin1_bin"))
            $target_collation = $target_bin_collation;
        $set = false;
        $binary_typename = binary_typename($type);
        if ($binary_typename != "") {
            MySQLSafeQuery($conn, "ALTER TABLE `{$tab}` MODIFY `{$name}` {$binary_typename}");
            MySQLSafeQuery($conn, "ALTER TABLE `{$tab}` MODIFY `{$name}` {$type} CHARACTER SET '{$target_charset}' COLLATE '{$target_collation}'");
            $set = true;
            echo "Altered field {$name} on {$tab} from type {$type}\n";
        }
        $target_collation = $target_collation_bak;
    }

    // Rebuild indicies
    foreach ($indicies as $index) {
         // Handle multi-column indices
         $joined_col_str = "";
         foreach ($index["col"] as $col)
             $joined_col_str = $joined_col_str . ", `" . $col . "`";
         $joined_col_str = substr($joined_col_str, 2);

         $query = "";
         if ($index["unique"])
             $query = "CREATE UNIQUE INDEX `{$index["name"]}` ON `{$tab}` ({$joined_col_str})";
         else
             $query = "CREATE INDEX `{$index["name"]}` ON `{$tab}` ({$joined_col_str})";
         MySQLSafeQuery($conn, $query);

        echo "Created index {$index["name"]} on {$tab}. Unique: {$index["unique"]}\n";
    }

    // Set default character set and collation for table
    MySQLSafeQuery($conn, "ALTER TABLE `{$tab}`  DEFAULT CHARACTER SET '{$target_charset}' COLLATE '{$target_collation}'");
}

// Set default character set and collation for database
MySQLSafeQuery($conn, "ALTER DATABASE `{$db}` DEFAULT CHARACTER SET '{$target_charset}' COLLATE '{$target_collation}'");

mysqli_close($conn);
echo "</pre>";

?>
0
davewy

Windows Kullanıcıları İçin

@Davidwinterbottom yanıtına ek olarak, Windows kullanıcıları aşağıdaki komutu kullanabilirler:

mysql.exe --database=[database] -u [user] -p[password] -B -N -e "SHOW TABLES" \
| awk.exe '{print "SET foreign_key_checks = 0; ALTER TABLE", $1, "CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; SET foreign_key_checks = 1; "}' \
| mysql.exe -u [user] -p[password] --database=[database] &

[Veritabanı], [kullanıcı] ve [şifre] yer tutucularını gerçek değerlerle değiştirin.

Git-bash kullanıcıları bu bash betiğini indirebilir ve kolayca çalıştırabilir.

0
Lost Koder

En hızlı yol phpmyadmin ve konsolda bazı jQuery ile olduğunu düşünüyorum.

Masanın yapısına gidin ve chrome/firefox geliştirici konsolunu açın (normal olarak klavyede F12):

  1. hatalı karakter kümesi olan tüm alanları seçmek için bu kodu çalıştırın ve değiştirmeye başlayın:

    var elems = $('dfn'); var lastID = elems.length - 1;
    elems.each(function(i) {
        if ($(this).html() != 'utf8_general_ci') { 
           $('input:checkbox', $('td', $(this).parent().parent()).first()).attr('checked','checked');
        }       
    
        if (i == lastID) {
            $("button[name='submit_mult'][value='change']").click();
        }
    });
    
  2. sayfa yüklendiğinde, doğru kodlamayı seçmek için bu kodu konsolda kullanın:

    $("select[name*='field_collation']" ).val('utf8_general_ci');
    
  3. kayıt etmek

  4. "İşlem" sekmesindeki tablonun karakter grubunu "Harmanlama" alanında değiştirin

Phpmyadmin 4.0 ve 4.4'te test edilmiştir, ancak tüm 4.x sürümlerinde çalışmayı düşünüyorum

0
Luca Camillo

Komut satırı erişimi ya da INFORMATION_SCHEMA düzenleme erişiminiz yoksa, bunu sadece phpmyadmin ile yapmanın kolay bir yolu var.

Öncelikle, buradaki diğer cevapların çoğunun tavsiyelerini dinleyiniz - burada bir şeyleri gerçekten mahvedebilirsiniz, o yüzden bir yedekleme yapın. Şimdi yedeklemenizi yedekleyin. Ayrıca, verileriniz değiştirdiğinizden farklı bir şekilde kodlanmışsa, bunun çalışması olası değildir.

Başlamadan önce değiştirmeniz gereken rahatsız edici şema ve karakter kodlamasının tam adlarını bulmanız gerekeceğini unutmayın.

  1. Veritabanını SQL olarak dışa aktarın; Bir kopyasını çıkarmak; Seçtiğiniz bir metin düzenleyicide açın
  2. Önce şema bul ve değiştir, örneğin - find: latin1_swedish_ci , şunu değiştir: utf8_general_ci
  3. Gerekirse karakter kodlamasını bulun ve değiştirin, örneğin - find: latin1 , değiştirin: utf8
  4. Yeni bir test veritabanı oluşturun ve yeni SQL dosyanızı phpmyadmin'e yükleyin

Bu, bunu yapmanın çok kolay bir yoludur, ancak yine, bu, verilerinizin kodlamasını değiştirmez, bu nedenle yalnızca belirli durumlarda çalışır.

0
squarecandy

Kod için teşekkürler @ nlaq, bu beni aşağıdaki çözüme ulaştırdı.

WordPress'in harmanlamayı otomatik olarak ayarlamadığını fark etmeden bir WordPress eklentisi yayımladım. Bu yüzden eklentiyi kullanan bir çok insan latin1_swedish_ci olması gerektiğinde utf8_general_ci ile sonuçlandı.

İşte latin1_swedish_ci harmanlamasını algılamak ve onu utf8_general_ci olarak değiştirmek için eklentiye eklediğim kod.

Kendi eklentinizde kullanmadan önce bu kodu test edin!

// list the names of your wordpress plugin database tables (without db prefix)
$tables_to_check = array(
    'social_message',
    'social_facebook',
    'social_facebook_message',
    'social_facebook_page',
    'social_google',
    'social_google_mesage',
    'social_Twitter',
    'social_Twitter_message',
);
// choose the collate to search for and replace:
$convert_fields_collate_from = 'latin1_swedish_ci';
$convert_fields_collate_to = 'utf8_general_ci';
$convert_tables_character_set_to = 'utf8';
$show_debug_messages = false;
global $wpdb;
$wpdb->show_errors();
foreach($tables_to_check as $table) {
    $table = $wpdb->prefix . $table;
    $indicies = $wpdb->get_results(  "SHOW INDEX FROM `$table`", ARRAY_A );
    $results = $wpdb->get_results( "SHOW FULL COLUMNS FROM `$table`" , ARRAY_A );
    foreach($results as $result){
        if($show_debug_messages)echo "Checking field ".$result['Field'] ." with collat: ".$result['Collation']."\n";
        if(isset($result['Field']) && $result['Field'] && isset($result['Collation']) && $result['Collation'] == $convert_fields_collate_from){
            if($show_debug_messages)echo "Table: $table - Converting field " .$result['Field'] ." - " .$result['Type']." - from $convert_fields_collate_from to $convert_fields_collate_to \n";
            // found a field to convert. check if there's an index on this field.
            // we have to remove index before converting field to binary.
            $is_there_an_index = false;
            foreach($indicies as $index){
                if ( isset($index['Column_name']) && $index['Column_name'] == $result['Field']){
                    // there's an index on this column! store it for adding later on.
                    $is_there_an_index = $index;
                    $wpdb->query( $wpdb->prepare( "ALTER TABLE `%s` DROP INDEX %s", $table, $index['Key_name']) );
                    if($show_debug_messages)echo "Dropped index ".$index['Key_name']." before converting field.. \n";
                    break;
                }
            }
            $set = false;

            if ( preg_match( "/^varchar\((\d+)\)$/i", $result['Type'], $mat ) ) {
                $wpdb->query( "ALTER TABLE `{$table}` MODIFY `{$result['Field']}` VARBINARY({$mat[1]})" );
                $wpdb->query( "ALTER TABLE `{$table}` MODIFY `{$result['Field']}` VARCHAR({$mat[1]}) CHARACTER SET {$convert_tables_character_set_to} COLLATE {$convert_fields_collate_to}" );
                $set = true;
            } else if ( !strcasecmp( $result['Type'], "CHAR" ) ) {
                $wpdb->query( "ALTER TABLE `{$table}` MODIFY `{$result['Field']}` BINARY(1)" );
                $wpdb->query( "ALTER TABLE `{$table}` MODIFY `{$result['Field']}` VARCHAR(1) CHARACTER SET {$convert_tables_character_set_to} COLLATE {$convert_fields_collate_to}" );
                $set = true;
            } else if ( !strcasecmp( $result['Type'], "TINYTEXT" ) ) {
                $wpdb->query( "ALTER TABLE `{$table}` MODIFY `{$result['Field']}` TINYBLOB" );
                $wpdb->query( "ALTER TABLE `{$table}` MODIFY `{$result['Field']}` TINYTEXT CHARACTER SET {$convert_tables_character_set_to} COLLATE {$convert_fields_collate_to}" );
                $set = true;
            } else if ( !strcasecmp( $result['Type'], "MEDIUMTEXT" ) ) {
                $wpdb->query( "ALTER TABLE `{$table}` MODIFY `{$result['Field']}` MEDIUMBLOB" );
                $wpdb->query( "ALTER TABLE `{$table}` MODIFY `{$result['Field']}` MEDIUMTEXT CHARACTER SET {$convert_tables_character_set_to} COLLATE {$convert_fields_collate_to}" );
                $set = true;
            } else if ( !strcasecmp( $result['Type'], "LONGTEXT" ) ) {
                $wpdb->query( "ALTER TABLE `{$table}` MODIFY `{$result['Field']}` LONGBLOB" );
                $wpdb->query( "ALTER TABLE `{$table}` MODIFY `{$result['Field']}` LONGTEXT CHARACTER SET {$convert_tables_character_set_to} COLLATE {$convert_fields_collate_to}" );
                $set = true;
            } else if ( !strcasecmp( $result['Type'], "TEXT" ) ) {
                $wpdb->query( "ALTER TABLE `{$table}` MODIFY `{$result['Field']}` BLOB" );
                $wpdb->query( "ALTER TABLE `{$table}` MODIFY `{$result['Field']}` TEXT CHARACTER SET {$convert_tables_character_set_to} COLLATE {$convert_fields_collate_to}" );
                $set = true;
            }else{
                if($show_debug_messages)echo "Failed to change field - unsupported type: ".$result['Type']."\n";
            }
            if($set){
                if($show_debug_messages)echo "Altered field success! \n";
                $wpdb->query( "ALTER TABLE `$table` MODIFY {$result['Field']} COLLATE $convert_fields_collate_to" );
            }
            if($is_there_an_index !== false){
                // add the index back.
                if ( !$is_there_an_index["Non_unique"] ) {
                    $wpdb->query( "CREATE UNIQUE INDEX `{$is_there_an_index['Key_name']}` ON `{$table}` ({$is_there_an_index['Column_name']})", $is_there_an_index['Key_name'], $table, $is_there_an_index['Column_name'] );
                } else {
                    $wpdb->query( "CREATE UNIQUE INDEX `{$is_there_an_index['Key_name']}` ON `{$table}` ({$is_there_an_index['Column_name']})", $is_there_an_index['Key_name'], $table, $is_there_an_index['Column_name'] );
                }
            }
        }
    }
    // set default collate
    $wpdb->query( "ALTER TABLE `{$table}` DEFAULT CHARACTER SET {$convert_tables_character_set_to} COLLATE {$convert_fields_collate_to}" );
    if($show_debug_messages)echo "Finished with table $table \n";
}
$wpdb->hide_errors();
0
dtbaker

IDE'nizin çoklu seçim özelliğini kullanarak basit (dilsiz? :) bir çözüm: 

  1. "SHOW TABLES"; sorgu ve sonuç sütununu kopyala (tablo adları).
  2. çoklu seçim başlangıçları ve "ALTER TABLE" ekleyin.
  3. çoklu seçim sonları ve "KARAKTER SETİNE DÖNÜŞTİR utf8 COLLATE utf8_general_ci;"
  4. oluşturulan sorguları çalıştırın.
0
snp0k