有服务器 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 并不总是相互跟随)
请帮忙!