读入二进制文件,
把它当作一个长字符串,
然后进行必要的字符转义
就可以插入数据了如果你想要把二进制数据插入到一个字符类型的字段中(例如BLOB),下列字符必须由转义序列表示: NUL 
ASCII 0,你应该用 “\0”(一个反斜线和一个ASCII “0”字符)表示它。 

ASCII 92,反斜线。需要用 “\\” 表示。 

ASCII 39,单引号。需要用 “\'” 表示。 

ASCII 34,双引号。需要用 “\"” 表示。 如果你写 C 代码,你可以使用 C API 函数mysql_real_escape_string() 来为 INSERT 语句转义字符。

解决方案 »

  1.   

    我是用C语言来操作数据库,可是没有办法生成insert语句,而且用select查询到的数据不能得到.怎么办阿
      

  2.   

    char query[1000],*end;end = strmov(query,"INSERT INTO test_table values(");
    *end++ = '\'';
    end += mysql_real_escape_string(&mysql, end,"What's this",11);
    *end++ = '\'';
    *end++ = ',';
    *end++ = '\'';
    end += mysql_real_escape_string(&mysql, end,"binary data: \0\r\n",16);
    *end++ = '\'';
    *end++ = ')';if (mysql_real_query(&mysql,query,(unsigned int) (end - query)))
    {
       fprintf(stderr, "Failed to insert row, Error: %s\n",
               mysql_error(&mysql));
    }
    The strmov() function used in the example is included in the mysqlclient library and works like strcpy() but returns a pointer to the terminating null of the first parameter. 
      

  3.   

    现在insert 语句已经尝试成功了, select 却总也不成功,    
        if((row=mysql_fetch_row(res))!=NULL)
            {
                    strcpy(buf,row[0]);//不成功,段错误,
                    //len=sizeof(row[0]); //不成功,值为4
                    len=mysql_fetch_lengths(res); //不成功,数值太大,100M,
                    printf("\n the length is %i, len=%i",strlen(buf),len);
                    //fwrite(/*buf*/ row[0],1,len,fp);
    各位大侠,应该怎样取得blob字段的值阿?救命阿!