如何在没有ASCII对话的情况下将二进制流插入MySQL?

时间:2014-12-11 16:12:09

标签: mysql c libmysql

我有一个用#34; C"写的应用程序。 - debian发行版(使用libmysqlclient)。我的应用程序是在数据库中插入大量行(大约30.000行/秒,行长度~150 B)。插入占用了很多CPU,因为客户端(我的应用程序)必须将二进制流(整数,blob)转换为ASCII表示形式的有效SQL插入语句。此外,MySQL必须将此值转换为二进制表示形式并将其存储到文件中。

我的问题。有没有可能在没有这个对话的情况下调用SQL插入?我一直在使用经典的sprintf(在libc中实现)。现在,我正在使用优化版本和 没有调用sprintf(太多的func调用)。我以为我会使用MySQL编写的声明,但似乎准备好的声明也会转换为'?'变量为ASCII。

1 个答案:

答案 0 :(得分:0)

请参阅mysql_real_query()

  

22.8.7.56 mysql_real_query()

     

int mysql_real_query(MYSQL * mysql,const char * stmt_str,unsigned long length)

显然,下面的内容应该有效

#define DATA "insert into atable (acolumn) values('zero\000quotes\"\'etc ...')"
if (mysql_real_query(db, DATA, sizeof DATA - 1)) /* error */;