首页 > 解决方案 > MySQL LOAD DATA LOCAL INFILE 不允许通过 ODBC

问题描述

我正在尝试将文本文件加载到 MySQL 表中。我收到的错误是:

HY000 1148 [MySQL][ODBC 8.0(w) Driver][mysqld-5.6.39]此MySQL版本不允许使用的命令

我的操作系统是 Ubuntu 16.04.4 LTS,客户端 MySQL 版本是 5.7.24。MySQL db 服务器位于运行 MySQL 5.6.39 的 AWS RDS 实例上

我尝试使用 ODBC 运行此命令:

LOAD DATA LOCAL INFILE 'abc.txt' INTO TABLE tblname FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n';

我可以使用命令行和 ODBC 连接成功连接到数据库,并且可以运行SELECTUPDATEINSERT等。命令没有问题。

我也可以LOAD DATA LOCAL INFILE使用 ODBC 连接从 Windows 机器上运行命令而没有问题,所以我知道问题不在服务器端。

我已尝试对 my.cnf 文件进行多次修改,但均未成功,包括此处的所有建议:

错误 1148:此 MySQL 版本不允许使用的命令

和这里:

LOAD DATA LOCAL INFILE 给出错误 The used command is not allowed with this MySQL version

这两种解决方案都建议在服务器上设置 local-infile=1,但我的服务器已经有了该设置。

标签: mysqlcsvodbc

解决方案


这个问题原来是一个 ODBC 连接器问题。

我使用的 MySQL ODBC 连接器版本是 8.0.11,它覆盖了 local-infile 参数并将其设置为零。在此版本的连接器中,参数不可编辑(据我所知)。

从版本 8.0.14 开始,用户可以将以下行添加到 odbc.ini 文件中:

ENABLE_LOCAL_INFILE=1

https://dev.mysql.com/doc/connector-odbc/en/connector-odbc-configuration-connection-parameters.html

升级到新的连接器并更新 odbc.ini 后,LOAD DATA LOCAL INFILE通过 ODBC 连接时成功。


推荐阅读