0

私がホストしている Web サイトの 1 つは、PHP 5.2 と MySQL 4.0 でまだ実行されています。そのテキストはヘブライ語です (サイトでは問題なく表示されます) が、DB では、テキストは疑問符を含む意味不明なものとして表示されますが、それだけではありません。次のようになります。?????£ ?§???¥ ???£ ?×???

この DB を同じ Web サイトで MySQL 5.x に移動しようとしていますが、今のところうまくいきません。MYSQL 40互換モードだけでなく、他の互換モードも使用してみました。宛先DBにhebrew_bin古いものと同じ照合順序があることを確認し、 SET NAMES. 問題は、これは私がまだ慣れていないタイプの意味不明なものであるため、読みやすいテキストに変換する方法がわからないことです。

4

1 に答える 1

0

ここで別の回答が得られなかったため、MySQL ダンプではなく PHP を介して手動で移行プロセスを実行する簡単なスクリプトを作成するしかありませんでした。

これがスクリプトですが、明らかな変更が加えられています。スクリプトは「汚いコード」であり、安全ではない可能性があり、最も効率的ではないことに注意してください。ただし、内部で使用している場合は、ジョブを完了する必要があります。スクリプトを変更せずに公開できる環境では使用しないでください。

<?php
    $local = mysqli_connect([source server], [source username], [source password], [source DB name]) or die('No local connection');
    mysqli_query($local, "SET NAMES 'hebrew'");

    $remote = mysqli_connect([destination server], [destination  username], [destination password], [destination DB name]) or die('No remote connection');
    mysqli_query($remote, "SET NAMES 'utf8'");

    $table_list = array('table1', 'table2', 'table3'); // you can get a list of tables automatically too if the list is very long

    foreach ($table_list as $table)
    {
        $query_local = "SELECT * FROM `{$table}`";

        $result_local = mysqli_query($local, $query_local) or die('Error in q1: '.mysqli_error($local));

        $delete_remote = mysqli_query($remote, "DELETE FROM `{$table}` WHERE 1") or die('Error deleting table: '.$table); // necessary only if you plan to run it more than once

        $i = 0;
        while ($row_local = mysqli_fetch_assoc($result_local))
        {
            foreach ($row_local as $key => $value)
                $row_local[$key] = mysqli_real_escape_string($remote, $value);

            $query_remote = "INSERT INTO `{$table}` (`".implode('`, `', array_keys($row_local))."`) VALUES ('".implode("', '", $row_local)."')";

            $result_remote = mysqli_query($remote, $query_remote)
                or die('Error in remote q'.$i.' in table '.$table.':<br />&nbsp;&nbsp;'.mysqli_error($remote).'<br />&nbsp;&nbsp;Query: '.$query_remote);

            echo 'Successfully transferred row '.$i.' in table '.$table;
            echo '<br />'.PHP_EOL;

            $i++;
        }
    }
?>
于 2014-12-09T14:50:54.080 に答える