You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:58:25