【问题标题】:How do I change the connection character set when using ODBC to connect to MS Access?使用 ODBC 连接 MS Access 时如何更改连接字符集?
【发布时间】:2012-11-27 06:13:40
【问题描述】:

这是我连接数据库的方式:

$dbh = new PDO("odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=C:\\xampp\\htdocs\\bd\\db\\icr.accdb;Uid=Admin");

在我的数据库中,我有带有波兰字符的数据和字段,因此 sql 查询仅在文件以 ANSI 编码时有效。但是我的整个网站都有字符集 utf8(也有很多波兰字符)。那么,有什么方法可以将数据库的字符集更改为utf8?

我正在尝试这个:

$dbh->exec("set names utf8");

还有这个:

$dbh = new PDO("odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=C:\\xampp\\htdocs\\bd\\db\\icr.accdb;Uid=Admin", null, null, array(
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"
  ));

但两者都不起作用。有什么想法吗?

//不要问我为什么要在php中使用access数据库->我必须在我的大学项目中使用它:/

编辑: 代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<body>
<?php
try{
   // Connect
   $dbh = new PDO("odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=C:\\xampp\\htdocs\\bd\\db\\icr.accdb;Uid=Admin");
        $dbh->exec("set names utf8");
    $sql = "SELECT * FROM Miasta";
                        $myFile = "testFile.txt";
$fh = fopen($myFile, 'w') or die("can't open file");
    foreach ($dbh->query($sql) as $row)
        {
echo $row['Nazwa'] .' - '. $row['IDWojewództwa'] . '<br />';
$stringData = $row['Nazwa'] .' - '. $row['IDWojewództwa'] . '<br />';
fwrite($fh, $stringData);
        }
fclose($fh);
    /*** close the database connection ***/
    $dbh = null;
}
catch(PDOException $e)
    {
    echo $e->getMessage();
    }
?>
</body>
</html>

【问题讨论】:

  • 虽然SET NAMES 倾向于跨平台,但MYSQL_ATTR_INIT_COMMAND 属性仅适用于MySQL。当您发出SET NAMES utf8 时,究竟会发生什么?说它“不工作”对我们没有帮助。
  • 如果我没有记错访问数据库,请使用 utf-8,因为就像 2000 版本一样。您是否尝试选择一些带有波兰字符的行并将它们写入文件并使用 utf-8 编码在文本编辑器中打开它们?
  • @piotrekkr - 是的,你说得对,文件有正确的波兰语字符,这是我的代码示例:pastebin.com/xiJSPRj6,现在,如果文件以 ANSI 编码,则缺少波兰语字符,当我将编码更改为 UTF8 我收到该错误:注意:未定义索引:C:\xampp\htdocs\bd\conn.php 中的 IDWojewództwa 第 14 行 Wroc�aw - 注意:未定义索引:C:\xampp\htdocs\bd 中的 IDWojewództwa \conn.php on line 15 注意:未定义索引:IDWojewództwa in C:\xampp\htdocs\bd\conn.php on line 14 Warszawa - 注意:未定义索引:IDWojewództwa in
  • 您想使用来自$row 数组的不正确索引。将此echo $row['Nazwa']... 更改为echo '&lt;pre&gt;'; var_dump($row); echo '&lt;/pre&gt;',您将看到从数据库中为每一行返回的索引和值。使用来自var_dump()的那些;
  • @piotrekkr 这里是结果(文件有 utf8 编码)i.imgur.com/IP2Vh.png

标签: php sql ms-access unicode odbc


【解决方案1】:

如下使用:

$dbh = new PDO("odbc:Driver={Microsoft Access Driver (*.mdb  *.accdb)};Dbq=path\;Uid=Admin");
$dbh->exec("set names utf8");

【讨论】:

    【解决方案2】:

    您可以参考以下链接。这可能会对您有所帮助。>>http://docs.oracle.com/cd/E17952_01/refman-5.0-en/connector-odbc-configuration-connection-parameters.html

    另找>>http://www.herongyang.com/JDBC/JDBC-ODBC-MS-Access-Connection.html 更多程序

    【讨论】:

      【解决方案3】:

      解决方案:

      $tresc1 .= iconv("iso-8859-2","utf-8", $row['Nazwa'] .' - '. $row['IDWojewodztwa'] . '<br />');
      

      【讨论】:

      • 这个修复对我不起作用,我的问题是一样的,以同样的方式导入带有波兰语字符的访问文件。这就是您更改代码的全部内容吗?没有别的吗?
      猜你喜欢
      • 1970-01-01
      • 2014-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多