Excel VBA上传文本至MySQL遇ERROR 1148,Workbench正常如何解决?
解决Excel VBA执行LOAD DATA LOCAL INFILE报错1148的问题
我之前在MySQL 5.6.x版本上也碰到过一模一样的问题——Workbench能正常跑LOAD DATA LOCAL INFILE,但VBA里就报1148错误,明明ODBC连接能正常读写其他数据。结合踩过的坑,给你几个针对性的解决方法:
1. 强制在ODBC连接字符串中启用LOCAL选项
这是最常见的原因:MySQL ODBC驱动默认不会开启本地文件导入的客户端支持,哪怕服务器端已经开了local_infile=ON。你需要在连接字符串里显式加上LOCAL=1或者LOCAL=TRUE。
举个例子,原来的连接字符串可能是这样:
Dim connStr As String connStr = "DRIVER={MySQL ODBC 5.3 Unicode Driver};SERVER=你的服务器地址;DATABASE=库名;USER=用户名;PASSWORD=密码;"
修改成:
connStr = "DRIVER={MySQL ODBC 5.3 Unicode Driver};SERVER=你的服务器地址;DATABASE=库名;USER=用户名;PASSWORD=密码;LOCAL=1;"
如果用的是旧版驱动(比如5.2版本),也可以尝试把OPTION参数加上对应的值,比如OPTION=131072(这个值对应启用local infile的标志位),不过直接加LOCAL=1更直观。
2. 检查ODBC驱动的全局配置
有些时候光改连接字符串还不够,需要手动在ODBC数据源管理器里开启驱动的本地文件支持:
- 打开Windows的「ODBC数据源管理器」(选32位或64位,和你的Excel版本对应)
- 切换到「驱动程序」标签,找到你的MySQL ODBC驱动,点击「配置」
- 在弹出的配置窗口里,找到「Allow Local Infile」选项,勾选上并保存设置
3. 确认VBA代码中LOAD DATA语句的正确性
几个容易踩的小细节:
- 确保语句里写的是
LOAD DATA LOCAL INFILE,不要漏了LOCAL关键字 - Windows系统下的文件路径要用正斜杠
/,或者把反斜杠转义成两个\\,比如C:/temp/data.txt或者C:\\temp\\data.txt - 执行语句时用
ADODB.Command对象,确保CommandType设为adCmdText(默认就是这个,但有时候会被覆盖)
示例VBA代码:
Sub LoadDataToMySQL() Dim conn As ADODB.Connection Set conn = New ADODB.Connection ' 修改为你的连接字符串 Dim connStr As String connStr = "DRIVER={MySQL ODBC 5.3 Unicode Driver};SERVER=127.0.0.1;DATABASE=test_db;USER=root;PASSWORD=123456;LOCAL=1;" On Error GoTo ErrorHandler conn.Open connStr Dim cmd As ADODB.Command Set cmd = New ADODB.Command cmd.ActiveConnection = conn cmd.CommandText = "LOAD DATA LOCAL INFILE 'C:/temp/test_data.txt' INTO TABLE user_info " & _ "FIELDS TERMINATED BY ',' ENCLOSED BY '""' " & _ "LINES TERMINATED BY '\r\n' " & _ "IGNORE 1 LINES;" ' 如果文本有表头就加这句 cmd.Execute MsgBox "数据导入成功!" Cleanup: If Not conn Is Nothing Then If conn.State = adStateOpen Then conn.Close End If Set cmd = Nothing Set conn = Nothing Exit Sub ErrorHandler: MsgBox "错误:" & Err.Description & " 错误代码:" & Err.Number GoTo Cleanup End Sub
4. 确认MySQL用户的FILE权限
虽然Workbench能执行,但VBA用的数据库账号可能没有FILE权限——LOAD DATA LOCAL INFILE需要用户拥有这个权限。可以在Workbench里执行以下语句给用户授权:
GRANT FILE ON *.* TO '你的用户名'@'你的客户端IP'; FLUSH PRIVILEGES;
5. 匹配ODBC驱动和MySQL服务器版本
如果上面的方法都没用,可能是驱动版本不兼容。MySQL 5.6.10建议搭配MySQL ODBC 5.2或5.3版本的驱动(不要用太新的8.0版本,兼容性反而不好),你可以下载对应版本的驱动重新安装。
内容的提问来源于stack exchange,提问作者Nandakumar Udayakumar
相关产品推荐
相关产品推荐

