【发布时间】: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转换呢?
-
我还不知道运行它的服务器是否会安装驱动程序,而且我肯定没有安装它们的权限。