2

有服务器 1 和数据库 1,其中存储和查询数据,但没有设置 MySQL 连接编码。当然,在集成之前一切正常。

还有另一个使用 UTF8 编码连接的服务器和数据库 (2),因此所有值都正确存储。

必须将 db1 的某些表复制到 db2。

这就是我被任务困住的地方。我尝试SELECT INTO了多个连接,然后出现权限错误(我根本无法在需要时在单个查询中切换到其他用户)

我也尝试过类似 SELECT * INTO OUTFILE '/back.txt' FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' FROM article"的方法,即使我检查了我猜的所有权限,它也会返回 Access denied。

因此,我决定使用 PHP 手动获取数据,将其存储在数组中,然后正确插入具有连接编码集的所有内容。这应该有效。尽管它比我一直在尝试的任何其他方法都要复杂。

这些是没有敏感信息的代码片段:

连接到 server1,选择 DB1

for($id=0;$id<=203;$id++){
$q=mysql_query("SELECT * FROM article WHERE id=$id");
$n=mysql_num_rows($q);
$adat[$id]=mysql_fetch_assoc($q);
}

关闭连接 1,连接到 server2,选择 DB2

mysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'");

我想到了,如果我只能将查询应用于某个连接怎么办?这会更容易。我不知道这应该怎么做,所以我在下面写了这个烂摊子:

 foreach($adat as $k=>$v) {

    if(is_array($v)) foreach($v as $k2=>$v2) { echo $k." ".$v2;
    $puffer.=",'".$v2."'";
    } 
    $puffer=substr($puffer,1);
    echo $puffer;
    if(is_array($v)) mysql_query("INSERT INTO tarticles VALUES($puffer)");
    echo "<br/>";
}

啊啊啊啊啊 这没用。

(我正在检查 is_array 因为行 ID 并不总是相互跟随)

请帮忙!

4

0 回答 0