在MySQL中修复混乱的字符编码

时间:2013-09-05 13:05:31

标签: php mysql sql utf-8

存在服务器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拒绝,即使我检查了所有权限。

所以我决定用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/>";
}

Aaaaand。这是行不通的。

  

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

请帮忙!

0 个答案:

没有答案