2

我有一个 access(.mdb) 文件,其中包含阿拉伯语或波斯语字符。

我需要在 php 中使用它或将其导入 MySQL。

但它显示???? 而不是 utf8 字。

这是我的代码:

$conn = new COM("ADODB.Connection") or die("Cannot start ADO");
$db_connstr = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=".realpath("test.mdb")." ; DefaultDir=".realpath("");
$conn->open($db_connstr);
$conn2 = mysql_connect($dbhost, $dbuser, $dbpass) or die ('Error connecting to mysql');
//mysql_query("set names 'utf8'");
mysql_select_db($dbname);
$rs = $conn->Execute("SELECT name FROM test");
while (!$rs->EOF)
{
    $name = $rs->Fields("name");
    //echo utf8_encode ( $name );
    mysql_query("INSERT INTO test (id,name) VALUES (NULL,'".$name."') ");
    $rs->MoveNext();
} 
$rs->Close(); 

然后我使用 frommysql_query("set names 'utf8'")utf8_encode ( $name ) 不工作!

谁能帮我?

谢谢。

4

1 回答 1

1

可能,您的阿拉伯字符存储在 MS Access 的 CP-1256 中。在写入数据库之前,您需要将它们转换为 utf8。我使用 PDO 代替了您已弃用的 mysql_* 函数。输入您的用户名、密码和数据库名称:

<?php
$conn = new COM("ADODB.Connection") or die("Cannot start ADO");
$db_connstr = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=".realpath("test.mdb")." ; DefaultDir=".realpath("");
$conn->open($db_connstr);

try {
    //connect to mysql
    $username = 'user';
    $password = 'secret';
    $db_name = 'test';
    $mysql_conn = new PDO('mysql:host=localhost;dbname='.$db_name, $username, $password);
    $mysql_conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $mysql_conn->exec("SET NAMES 'utf8'");

    //prepare MySQL insert statement
    $stmt = $mysql_conn->prepare('INSERT INTO `test` SET value=:value');

    $rs = $conn->Execute("SELECT name FROM test");
    while (!$rs->EOF)
    {
        $name = $rs->Fields("name");
        //convert from cp1256 to uft8
        $name = iconv('cp1256', 'utf-8', $name);
        //insert into MySQL
        $stmt->execute(array("value" => $name));
        $rs->MoveNext();
    }
    $rs->Close();
} catch(PDOException $e) {
      echo 'ERROR: ' . $e->getMessage();
}
于 2013-06-12T14:03:24.820 回答