我目前正在处理一个我想将各种表从MySQL数据库导出到csv文件的事情,然后应该可以将这些csv文件导入带有VBA的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:保留错误(-5402)。
我已经尝试通过在fopen()
之后添加一个UTF-8 bom来使csv文件在php中表现得更多UTF-8:如下所示:
fputs($csvfile, chr(0xEF) . chr(0xBB) . chr(0xBF) );
当我在excel或notepad ++中打开csv文件时,charset似乎没问题。当在php中使用UTF-8 bom并尝试导入时,bom最终会成为第一列标题的一部分:columnheadingone
。对于我所知道的关于schema.ini如何工作的人来说,这可能并不令人惊讶。
如果有任何解决方法,我将不胜感激。
答案 0 :(得分:2)
“Text ISAM”驱动程序及其关联的“schema.ini”文件不支持UTF-8文件,因为它们早于Unicode时代。 MSDN文档的“选择字符集”部分
Schema.ini File (Text File Driver)
说
您可以从两个字符集中进行选择:ANSI和OEM。
因此,您可能需要设计另一种方式来导入数据。如果您想使用UTF-8,那么您可能会对相关问题here感兴趣。