mysql 存储二进制数据
晚上小研究了下MySQL存储于读取二进制数据的功能。关键步骤为以下三点: 最重要的一点:存储二进制数据的表的类型需要是blob类型(按长度不同分为tiny, media, long)
插入二进制数据时需要利用mysql_real_escape_string函数对数据进行转换
从数据库中读取二进制数据时需要利用mysql_fetch_length函数字段长度,该函数需要在mysql_fetch_row调用后才可以正常获取结果
给出一个用C写的一个存储与读取字段的小例子,写的比较粗犷,见谅哈~ 先来一个插入: 复制代码
int
db_insert_object(void *object, unsigned int objsize)
{
int ret;
char *escape_object = NULL;
char sql[];
unsigned int escape_size = * objsize + ;
int sql_len;
MYSQL *mysql= NULL; /* connnect db */
mysql = mysql_init(NULL);
if( !mysql_real_connect(mysql, SERVER, USER, PASSWD, DATABASE, , NULL, ) ){
goto error1;
} /* convert binary string */
escape_object = (char *)malloc(escape_size);
if( escape_object == NULL ){
goto error1;
}
escape_size = mysql_real_escape_string(mysql, escape_object, (char *)object, objsize); sql_len = sprintf(sql, "insert into task(object) values('%s')", escape_object);
ret = mysql_real_query(mysql, sql, sql_len);
if( ret ){
goto error1;
} free(escape_object);
mysql_close(mysql);
return ; error1:
printf("error: %s\n", mysql_error(mysql));
if( mysql ) mysql_close(mysql);
if( escape_object ) free(escape_object);
return -;
}
复制代码
然后是读取: 复制代码
void *
db_fetch_object()
{
MYSQL *mysql= NULL;
MYSQL_RES *res = NULL;
MYSQL_ROW row;
unsigned long *row_len;
char *object = NULL;
const char *sql = "select object from task limit 1";
unsigned long objsize;
int ret; /* connnect db */
mysql = mysql_init(NULL);
if( !mysql_real_connect(mysql, SERVER, USER, PASSWD, DATABASE, , NULL, ) ){
goto error2;
} /* get object */
ret = mysql_real_query(mysql, sql, strlen(sql));
if( ret ){
goto error2;
} res = mysql_store_result(mysql);
if( res == NULL ){
goto error2;
} /* important */
row = mysql_fetch_row(res);
row_len = mysql_fetch_lengths(res); /* get the object's length */
if( row_len == NULL ){
goto error2;
}
objsize = row_len[];
object = (char*)malloc(objsize);
if( object == NULL ){
goto error2;
} memcpy(object, row[], objsize); mysql_close(mysql);
mysql_free_result(res);
return (void*)object; error2:
printf("error: %s\n", mysql_error(mysql));
if( res ) mysql_free_result(res);
if( mysql ) mysql_close(mysql);
if( object ) free(object);
return NULL;
}
好像还有一种直接点mysql api可以存储二进制数据。
mysql 存储二进制数据的更多相关文章
- python+ mysql存储二进制流的方式
		很多时候我们为了管理方便会把依稀很小的图片存入数据库,有人可能会想这样会不会对数据库造成很大的压力,其实大家可以不用担心,因为我说过了,是存储一些很小的图片,几K的,没有问题的! 再者,在这里我们是想 ... 
- 数据库中用varbinary存储二进制数据
		问题描述:将图片.二进制文件内容等数据存储在数据库中,并能从数据库中取出还原为图片或文件,数据库存储二进制数据用varbinary字段. 分析:由于之前数据库中没有用过varbinary存储数据,首先 ... 
- mssql  sqlserver 可以存储二进制数据的字段类型详解
		转自: http://www.maomao365.com/?p=6738 摘要: 下文将从数据库的数据类型着手,剖析在sqlserver数据库中可以存储二进制数据的数据类型,如下所示: mssql s ... 
- mongodb存储二进制数据
		mongodb 3.x存储二进制数据并不是以base64的方式,虽然在mongo客户端的查询结果以base64方式显示,请放心使用.下面来分析存储文件的存储内容.base64编码数据会增长1/3成为顾 ... 
- python django中使用sqlite3数据库 存储二进制数据ByteArray
		在python中使用sqlite3数据库存储二进制流数据ByteArray,在django使用sqlite3数据库时,有时候也要注意最好使用二进制流ByteArray插入字符串. 使用ByteArra ... 
- mongodb存储二进制数据的二种方式——binary bson或gridfs
		python 版本为2.7 mongodb版本2.6.5 使用mongodb存储文件,可以使用两种方式,一种是像存储普通数据那样,将文件转化为二进制数据存入mongodb,另一种使用gridfs,咱们 ... 
- 读取MySQL存储二进制的语音、图片(Blob类型)
		/** * 下载语音 * Remarks: * @throws Exception */ public void downloadYuyin() throws Exception { ... 
- BLOB类型的字段用于存储二进制数据
		MySQL中,BLOB是个类型系列,包括:TinyBlob.Blob.MediumBlob.LongBlob,这几个类型之间的唯一区别是在存储文件的最大大小上不同. MySQL的四种BLOB类型类型 ... 
- MYSQL C API : mysql_real_escape_string     二进制数据存储
		#include <iostream> #include <string> #include <string.h> #include <mysql.h> ... 
随机推荐
- html5学习整理-0311
			整理一下今天所学的一些标签内容. 首先说一下DNS:全称Domain Name System,域名系统.是因特网上作为域名和IP地址相互映射的一个分布式数据库. URL协议:规定URL地址的格式,UR ... 
- Ruby中map, collect,each,select,reject,reduce的区别
			# map 针对每个element进行变换并返回整个修改后的数组 def map_method arr1 = ["name2", "class2"] arr1. ... 
- django迁移model到别的app中
			举例: 移动 users.AccessKey 到 authentication.AccessKey中 1. 移动models到新的app中 $ mv users/models/access_key.p ... 
- ajax--百度百科
			AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术. AJAX = 异步 JavaScript和 ... 
- 网页视频播放方案chimee 组件使用
			1.概述 鉴于目前 H5-Video 在 Web 生态环境中存在较大差异化(兼容性)的表现,本文主要介绍使用奇舞团开发chimee 组件进行视频播放的用法. chimee 组件地址: http://c ... 
- iframe元素获取
			应用场景:main.jsp 中有Iframe,其中包含 home.jsp,在main.jsp中的dom元素绑定的方法操作home.jsp中元素.或反之操作. 
- 递归函数, 匿名函数, yield from
			递归函数 函数执行流程 http://pythontutor.com/visualize.html#mode=edit 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 ... 
- 深入理解Tomcat虚拟文件夹
			我们知道,Web站点中的内容(包含网页,图片,音频文件等)一般都存放在App的文件夹下.但随着站点内容的不断丰富,用户须要把不同层次的内容组织成站点的子文件夹. 我们通常的做法是在站点主文件夹 ... 
- Angular 2 组件之间如何通信?
			组件之间的共享可以有好几种方式 http://learnangular2.com/outputs/ 实例参考https://angular.io/docs/ts/latest/cookbook/com ... 
- 使用wget工具抓取网页和图片 成功尝试
			使用wget工具抓取网页和图片 发表于1年前(2014-12-17 11:29) 阅读(2471) | 评论(14) 85人收藏此文章, 我要收藏 赞7 wget 网页抓取 图片抓取 目录[-] ... 
