错误 此 MySQL 版本不允许使用的命令
我在将一些 mysqlclient C++ 代码从 Mysql 5.1 迁移到 5.5(使用 soci)时遇到问题。C++ 部分不太相关——问题是编写一些 mysqlclient 代码,它可以在 MySQL 5.5 上成功执行 LOAD DATA INFILE。
这是我的笔记(LOAD DATA INFILE 失败,但正常查询是可以的):
下面的代码在 Mysql 5.1、gcc 4.6.1、Oneiric 上运行良好
相同的代码在 Mysql 5.5、gcc 4.7.2、Quantal 上失败
如果我从 mysql(命令行客户端)加载数据输入文件,它工作正常(我已经用 local-infile=1 更新了 my.cnf)
mysql> 显示变量,如 '%local_infile%'; 结果打开
如果有一个 SOCI 或配置解决方案,那就太好了,但如果有人设法让它与 libmysqlclient 一起工作,那也很高兴知道......
#include <soci.h>
#include <mysql/soci-mysql.h>
#include <string>
#include <iostream>
using soci::use;
using namespace std;
using namespace soci;
main()
{
string val =
"mysql://" +
"host=127.0.0.1" +
" dbname=tmp_db" +
" user=root" +
" password=open_sasame";
int sum;
session sql( val );
sql << "SELECT 1+1", into( sum );
cerr << "RESULT=" << sum << endl; // works fine
// NEXT LINE FAILS WITH:
// The used command is not allowed with this MySQL version
sql << "LOAD DATA LOCAL INFILE '/tmp/junk3.txt' INTO TABLE tmp_db.example_tbl FIELDS TERMINATED BY '|' LINES TERMINATED BY '\\n'";
}