我无法将MS数据(TEXT类型的列,长度约为4000个字符串)写入MS Access(MEMO类型的列)。我使用PDO连接到mdb Access数据库:
function i($name) {
return iconv("utf-8","windows-1250",$name);
}
try{
$db = new PDO("odbc:Driver={Microsoft Access Driver (*.mdb)};Dbq=mydb.mdb;Uid=");
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e){
echo $e->getMessage();
}
//....fetching mysql data ....
//updating
$upd_query = $db->prepare("update SKz set Name = :Name, Desc2 = :Desc2 WHERE ID = :ID");
$upd_query->execute(array(
':Name'=>i($r['name']),
':Desc2'=>i($r['desc2']),
':ID'=>(int)$r['id']
)
);
操作看起来没问题,没有错误,但是在我从Access读回记录后,在插入的字符串的末尾有一些随机非法字符(列Desc2),例如Řl9h“ h” € ô
我尝试了一些方法,比如使用iconv,preg_replace清理文本,不起作用。 MySql编码为UTF8,Access具有Windows-1250。
如何清理非法字符并防止插入?有什么想法吗?
(在XAMPP包上测试,Windows server 2003 64位)
答案 0 :(得分:0)
我希望您之前找到了问题的答案,但是这里有关于特殊字符的问题的引导:Unable to retrieve UTF-8 accented characters from Access via PDO_ODBC
简单但不完整的修复
Access返回的文本实际上匹配该字符集中字符的Windows-1252字符编码,因此只需更改行
$s = $row["Team"];
到
$s = utf8_encode($row["Team"]);