0x01
首先mysql支援二進位制的型別有blob:
mysql的四種blob型別
型別 大小(單位:位元組)
tinyblob 最大 255
blob 最大 65k
mediumblob 最大 16m
longblob 最大 4g
0x02
插入二進位制資料時需要利用mysql_real_escape_string函式對資料進行轉換
0x03
讀取二進位制資料時需要利用mysql_fetch_length函式字段長度,該函式需要在mysql_fetch_row呼叫後才可以正常獲取結果
0x04
寫入例子:
int cfinger_printdlg::connect_mysql(byte b_name, byte* b_data,int len_of_data) ;
unsigned int port = 3306;
bool return_result = false;
mysql mycont;
mysql_res *result;
mysql_row sql_row;
hwnd hwnd = getsafehwnd();
tchar sql_buf_t[100] = {};
//clistctrl* list = (clistctrl*)getdlgitem(idc_list3);
mysql_init(&mycont);
if (mysql_real_connect(&mycont, host, user, pswd, db, port, null, 0))
mysql_query(&mycont, "set names gbk"); //設定編碼格式
char buf[2000] = ;
unsigned int escape_size = 2 * len_of_data + 2;
char* escape_object = (char *)malloc(escape_size);
escape_size = mysql_real_escape_string(&mycont, (char*)escape_object, (char *)b_data, len_of_data);
int sql_len = sprintf_s(buf, "insert into finger3(info) values('%s')", escape_object);
res = mysql_real_query(&mycont,buf, sql_len);
if (!res) }
else
mysql_close(&mycont);
return return_result;
}
0x05
讀取操作:
void* cfinger_printdlg::read_mysql()
mysql_res *res = null;
mysql_row row;
unsigned long *row_len;
char *object = null;
//const char *sql = "select info from final where id=";
char sql[100] = ;
unsigned long objsize;
int ret;
for (int i = 1; i <= 10; i++)
res = mysql_store_result(&mycont);
if (res == null)
/* important */
row = mysql_fetch_row(res);
row_len = mysql_fetch_lengths(res); /* get the object's length */
if (row_len == null)
objsize = row_len[0];
object = (char*)malloc(objsize);
if (object == null)
memcpy(object, row[0], objsize);
if (biokey_db_add(zkfingerhandle, i, objsize, (byte*)object)) }
g_connect = false;
; //mysql_close(&mycont);
mysql_free_result(res);
return null;
}
0x06
更新操作:
int cfinger_printdlg::updata_mysql(byte b_name, byte* b_data, int len_of_data)
int res;
bool return_result = false;
mysql_query(&mycont, "set names gbk"); //設定編碼格式
char buf[2000] = ;
unsigned int escape_size = 2 * len_of_data + 2;
char* escape_object = (char *)malloc(escape_size);
escape_size = mysql_real_escape_string(&mycont, (char*)escape_object, (char *)b_data, len_of_data);
cstring id_cs;
cstring name_cs;
int id;
char name[20] = ;
getdlgitem(idc_edit1)->getwindowtextw(id_cs);
getdlgitem(idc_edit2)->getwindowtextw(name_cs);
id = _wtoi(id_cs);
widechartomultibyte(cp_acp, 0, name_cs, -1, name, name_cs.getlength(), null, null);
//int sql_len = sprintf_s(buf, "insert into final(id,name,info) values('%d','%s','%s')", id, name, escape_object);
//update 表名稱 set 列名稱 = 新值 where 列名稱 = 某值
int sql_len = sprintf_s(buf, "update final set name='%s',info='%s' where id ='%d'", name, escape_object, id);
res = mysql_real_query(&mycont, buf, sql_len);
if (!res) }
else
//mysql_close(&mycont);
g_connect = false;
return return_result;
}
c mysql二進位制訪問,blob訪問
取二進位制資料 一樣的sql語句,查詢出來即可。只不過二進位制資料是個資料塊,需要得到資料塊的大小和資料指標。bool cmysqlaccess getbinaryfield int ncol,char pdataout,int ndatalen else 像通常一樣查詢後,得到結果集,然後得到第n...
MySQL儲存二進位制資料
晚上小研究了下mysql儲存於讀取二進位制資料的功能。關鍵步驟為以下三點 最重要的一點 儲存二進位制資料的表的型別需要是blob型別 按長度不同分為tiny,media,long 插入二進位制資料時需要利用mysql real escape string函式對資料進行轉換 從資料庫中讀取二進位制資料...
mongodb儲存二進位制資料
mongodb 3.x儲存二進位制資料並不是以base64的方式,雖然在mongo客戶端的查詢結果以base64方式顯示,請放心使用。下面來分析儲存檔案的儲存內容。base64編碼資料會增長1 3成為顧慮。首先看mongo的c driver對binary型別資料的相關定義。注意下面提到了js,要清楚...