首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL 4.0胡言乱语不能转换为新的MySQL

MySQL 4.0胡言乱语不能转换为新的MySQL
EN

Stack Overflow用户
提问于 2014-09-07 09:18:16
回答 1查看 40关注 0票数 0

我主持的其中一个网站仍然运行在PHP5.2和MySQL 4.0上。它的文本是希伯来文(在网站上显示得很好),但在DB中,文本显示为带有问号的胡言乱语--但不完全是这样。看起来有点像:?????£ ?§???¥ ???£ ?×???

我试图用相同的网站将这个DB移动到MySQL 5.x,到目前为止没有运气。我尝试过使用MYSQL 40兼容模式,以及其他兼容性模式。我已经确保目的地DB具有与旧数据库一样的hebrew_bin排序规则,并且我一直在使用SET NAMES。问题是,这是一种我还不熟悉的胡言乱语,因此不知道如何将其转换为可读文本。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-09 14:50:54

我在这里没有得到另一个答案,因此别无选择,只能编写一个简单的脚本,通过PHP手动完成迁移过程,而不是通过MySQL转储。

这是脚本,有一些明显的修改。请注意,这个脚本是“脏代码”,它可能不是安全的,也不是最有效的,但是如果您在内部使用它,它应该可以完成任务。在没有进一步修改的情况下,不要在脚本可供公众访问的环境中使用。

代码语言:javascript
复制
<?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++;
        }
    }
?>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25708731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档