晚上小研究了下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 存储二进制数据的更多相关文章

  1. python+ mysql存储二进制流的方式

    很多时候我们为了管理方便会把依稀很小的图片存入数据库,有人可能会想这样会不会对数据库造成很大的压力,其实大家可以不用担心,因为我说过了,是存储一些很小的图片,几K的,没有问题的! 再者,在这里我们是想 ...

  2. 数据库中用varbinary存储二进制数据

    问题描述:将图片.二进制文件内容等数据存储在数据库中,并能从数据库中取出还原为图片或文件,数据库存储二进制数据用varbinary字段. 分析:由于之前数据库中没有用过varbinary存储数据,首先 ...

  3. mssql sqlserver 可以存储二进制数据的字段类型详解

    转自: http://www.maomao365.com/?p=6738 摘要: 下文将从数据库的数据类型着手,剖析在sqlserver数据库中可以存储二进制数据的数据类型,如下所示: mssql s ...

  4. mongodb存储二进制数据

    mongodb 3.x存储二进制数据并不是以base64的方式,虽然在mongo客户端的查询结果以base64方式显示,请放心使用.下面来分析存储文件的存储内容.base64编码数据会增长1/3成为顾 ...

  5. python django中使用sqlite3数据库 存储二进制数据ByteArray

    在python中使用sqlite3数据库存储二进制流数据ByteArray,在django使用sqlite3数据库时,有时候也要注意最好使用二进制流ByteArray插入字符串. 使用ByteArra ...

  6. mongodb存储二进制数据的二种方式——binary bson或gridfs

    python 版本为2.7 mongodb版本2.6.5 使用mongodb存储文件,可以使用两种方式,一种是像存储普通数据那样,将文件转化为二进制数据存入mongodb,另一种使用gridfs,咱们 ...

  7. 读取MySQL存储二进制的语音、图片(Blob类型)

    /**   * 下载语音   * Remarks:   * @throws Exception   */ public void downloadYuyin() throws Exception { ...

  8. BLOB类型的字段用于存储二进制数据

    MySQL中,BLOB是个类型系列,包括:TinyBlob.Blob.MediumBlob.LongBlob,这几个类型之间的唯一区别是在存储文件的最大大小上不同. MySQL的四种BLOB类型类型 ...

  9. MYSQL C API : mysql_real_escape_string 二进制数据存储

    #include <iostream> #include <string> #include <string.h> #include <mysql.h> ...

随机推荐

  1. JAVA加解密 -- 消息摘要算法

    消息摘要算法是一种单向加密算法 主要用于验证数据完整性,也是数字签名的核心算法 消息鉴别:指在接收方将原始信息进行摘要,然后与接收到的摘要信息进行对比 a.MD家族 – MD5(128位摘要信息) M ...

  2. mac重置蓝牙模块

    升级系统后蓝牙鼠标无法连接,蓝牙模块也无法关闭,通过重置 PRAM和SMC解决 PRAM 重置 关机,拔掉所有外设,接上电源. 启动时同时按住 Command, Option, p, r , 听到三次 ...

  3. JAVA IO操作:数据操作流:DataOutputStream和DataInputStream

    掌握DataOutputStream和DataInputStream的作用. 可以使用DataOutputStream和DataInputStream写入和读取数据. 在IO包中提供了两个与平台无关的 ...

  4. UITabBarController超强拓展

    代码地址如下:http://www.demodashi.com/demo/11901.html 一.运行效果图 二.项目结构截图 三.主要API 我们主要关注的是TLTabBarController, ...

  5. python challenge - orc.py

    http://www.pythonchallenge.com/pc/def/ocr.html recognize the characters. maybe they are in the book, ...

  6. 将python对象序列化成php能读取的格式(即能反序列化到对象)

    转载自:http://my.oschina.net/zuoan001/blog/94914 代码如下: #coding:utf-8 # vim: encoding=utf-8:ft=python:et ...

  7. MVC中上传文件大小限制的解决办法

    在Web.Config文件中配置限制上传文件大小与时间. 需要在配置文件里面设置文件上传限定的两个属性值:maxAllowedContentLength,maxRequestLength 允许上传文件 ...

  8. 数据库面试题.net

    1.ADO.net中常用的对象 connection, command, sqladapter, dataset, dataview. 2.net中读写数据库要用到哪些类 DataSet数据存储 Da ...

  9. pandas 绘图与滑窗

    #import nessary library before start import pandas as pd import numpy as np import matplotlib.pyplot ...

  10. Tomcat的类加载器

    看完了Java类装载器,我们再来看看应用服务器(Tomcat)对类加载器的使用,每个应用服务器都有一套自己的类加载器体系,从而与Java的类加载器区别开以达到自己与应用程序隔离的目的.Tomcat的类 ...