PDO Access数据库 - 插入行时出现非法字符

时间:2014-03-11 20:13:34

标签: php mysql ms-access pdo

我无法将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位)

1 个答案:

答案 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"]);