【问题标题】:CSV export from php / Import to Access using VBA --- schema.ini CharacterSet issue使用 VBA 从 php 导出 CSV / 导入到 Access --- schema.ini CharacterSet 问题
【发布时间】:2026-02-18 01:00:02
【问题描述】:

我目前正在做一个事情,我想将各种表从 MySQL 数据库导出到 csv 文件,然后应该可以使用 VBA 将这些 csv 文件导入到 Access 数据库中。

我设法下载了一个包含 csv 文件和 schema.ini 的 zip 文件。为了导入 csv 文件,我大致使用了这段代码(为简洁起见省略了循环):

Sub ImportTableOne()
    Dim db As DAO.Database
    Set db = CurrentDb()
    frompart = "[Text;FMT=CSVDelimited;HDR=Yes;DATABASE=" & CurrentProject.Path & "\csvfiles\" & ";].[fileone.csv];"
    db.Execute _
    "SELECT * INTO tableone FROM" & frompart, dbFailOnError
    db.TableDefs.Refresh
    RefreshDatabaseWindow
End Sub

我的问题是我可以在我的 schema.ini 中有CharacterSet=ANSI,这当然会产生一个结果,例如í 变成í-。将 schema.ini 中的内容更改为 CharacterSet=UTF-8 将产生运行时错误 3000: reserved error (-5402)。

我已经尝试通过在fopen() 之后添加一个 UTF-8 bom 来让 csv 文件在 php 中表现得更加 UTF-8ish,如下所示:

fputs($csvfile, chr(0xEF) . chr(0xBB) . chr(0xBF) );

当我在 excel 或 notepad++ 中打开 csv 文件时,字符集似乎没问题。当在 php 中使用 UTF-8 bom 并尝试导入时,bom 最终会成为第一列标题的一部分,如下所示:columnheadingone。就我对 schema.ini 工作原理的了解而言,这可能并不令人惊讶。

我会很感激有关如何解决此问题的任何提示。

【问题讨论】:

  • 很好奇,为什么不使用 PHP 通过 ODBC/OLEDB 连接到 MS Access 数据库并附加数据?更何况,为什么不把MySQL链接表连接到Access,迁移到本地表,避免csv转换呢?
  • 我还不知道运行它的服务器是否会安装驱动程序,而且我肯定没有安装它们的权限。

标签: php vba csv ms-access


【解决方案1】:

“Text ISAM”驱动程序及其关联的“schema.ini”文件不支持 UTF-8 文件,因为它们早于 Unicode 时代。 MSDN 文档的“选择字符集”部分

Schema.ini File (Text File Driver)

您可以从两个字符集中进行选择:ANSI 和 OEM。

因此,您可能需要设计另一种方式来导入您的数据。如果您想使用 UTF-8,那么您可能会对相关问题 here 感兴趣。

【讨论】:

  • 谢谢。顺便说一句:我用谷歌搜索并试图加载这个页面,我不知道多少次,除了锚点什么都没有。所以对于读到这篇文章的每个人:等等。在一分钟的大部分时间里,你只会得到锚图标,然后最终得到你正在寻找的内容。现在,我将直接转到 iconv (),然后再更改为最有可能链接到此处的 XML 方法。