错误:该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> show variables like '%local_infile%'; 的结果为ON
如果有一个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'";
}