1. 晚上小研究了下MySQL存储于读取二进制数据的功能。关键步骤为以下三点:
  2.  
  3. 最重要的一点:存储二进制数据的表的类型需要是blob类型(按长度不同分为tiny, media, long
  4. 插入二进制数据时需要利用mysql_real_escape_string函数对数据进行转换
  5. 从数据库中读取二进制数据时需要利用mysql_fetch_length函数字段长度,该函数需要在mysql_fetch_row调用后才可以正常获取结果
  6. 给出一个用C写的一个存储与读取字段的小例子,写的比较粗犷,见谅哈~
  7.  
  8. 先来一个插入:
  9.  
  10. 复制代码
  11. int
  12. db_insert_object(void *object, unsigned int objsize)
  13. {
  14. int ret;
  15. char *escape_object = NULL;
  16. char sql[];
  17. unsigned int escape_size = * objsize + ;
  18. int sql_len;
  19. MYSQL *mysql= NULL;
  20.  
  21. /* connnect db */
  22. mysql = mysql_init(NULL);
  23. if( !mysql_real_connect(mysql, SERVER, USER, PASSWD, DATABASE, , NULL, ) ){
  24. goto error1;
  25. }
  26.  
  27. /* convert binary string */
  28. escape_object = (char *)malloc(escape_size);
  29. if( escape_object == NULL ){
  30. goto error1;
  31. }
  32. escape_size = mysql_real_escape_string(mysql, escape_object, (char *)object, objsize);
  33.  
  34. sql_len = sprintf(sql, "insert into task(object) values('%s')", escape_object);
  35. ret = mysql_real_query(mysql, sql, sql_len);
  36. if( ret ){
  37. goto error1;
  38. }
  39.  
  40. free(escape_object);
  41. mysql_close(mysql);
  42. return ;
  43.  
  44. error1:
  45. printf("error: %s\n", mysql_error(mysql));
  46. if( mysql ) mysql_close(mysql);
  47. if( escape_object ) free(escape_object);
  48. return -;
  49. }
  50. 复制代码
  51. 然后是读取:
  52.  
  53. 复制代码
  54. void *
  55. db_fetch_object()
  56. {
  57. MYSQL *mysql= NULL;
  58. MYSQL_RES *res = NULL;
  59. MYSQL_ROW row;
  60. unsigned long *row_len;
  61. char *object = NULL;
  62. const char *sql = "select object from task limit 1";
  63. unsigned long objsize;
  64. int ret;
  65.  
  66. /* connnect db */
  67. mysql = mysql_init(NULL);
  68. if( !mysql_real_connect(mysql, SERVER, USER, PASSWD, DATABASE, , NULL, ) ){
  69. goto error2;
  70. }
  71.  
  72. /* get object */
  73. ret = mysql_real_query(mysql, sql, strlen(sql));
  74. if( ret ){
  75. goto error2;
  76. }
  77.  
  78. res = mysql_store_result(mysql);
  79. if( res == NULL ){
  80. goto error2;
  81. }
  82.  
  83. /* important */
  84. row = mysql_fetch_row(res);
  85. row_len = mysql_fetch_lengths(res); /* get the object's length */
  86. if( row_len == NULL ){
  87. goto error2;
  88. }
  89. objsize = row_len[];
  90. object = (char*)malloc(objsize);
  91. if( object == NULL ){
  92. goto error2;
  93. }
  94.  
  95. memcpy(object, row[], objsize);
  96.  
  97. mysql_close(mysql);
  98. mysql_free_result(res);
  99. return (void*)object;
  100.  
  101. error2:
  102. printf("error: %s\n", mysql_error(mysql));
  103. if( res ) mysql_free_result(res);
  104. if( mysql ) mysql_close(mysql);
  105. if( object ) free(object);
  106. return NULL;
  107. }

好像还有一种直接点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. subscription group permisson

  2. js 上传图片进行回显

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. hibernate学习系列-----(9)hibernate对集合属性的操作之Map集合篇

    照旧,先新建一个StudentMap.java实体类,将hobby属性使用map集合接口来存放: package com.joe.entity; import java.util.Map; publi ...

  4. Python——描述符(descriptor)解密

    本文由 极客范 - 慕容老匹夫 翻译自 Chris Beaumont.欢迎加入极客翻译小组,同我们一道翻译与分享.转载请参见文章末尾处的要求. Python中包含了许多内建的语言特性,它们使得代码简洁 ...

  5. Java基于注解和反射导入导出Excel

    代码地址如下:http://www.demodashi.com/demo/11995.html 1. 构建项目 使用Spring Boot快速构建一个Web工程,并导入与操作Excel相关的POI包以 ...

  6. lucene: nDocs must be > 0查询异常解决

    nDocs must be > 0     // 函数search(query,filter,n),其中query是查询条件,filter是过滤器,n查询数量,异常消息意思就是n参数的值必须大于 ...

  7. Oracle undo 表空间管理 (摘DAVID)

    Oracle 的Undo有两种方式: 一是使用undo 表空间,二是使用回滚段. 我们通过 undo_management 参数来控制使用哪种方式,如果设为auto,就使用UNDO 表空间,这时必须要 ...

  8. Spring 常用类

    一.拦截器 public class SysInteceptor implements HandlerInterceptor { /** * 最后执行,可用于释放资源 */ @Override pub ...

  9. zendstdio的智能提示功能

    在项目的include的那个地方邮寄,在addsource file  然后指向TP类库的文件夹,刷新项目即可有智能提示

  10. linux系统之free命令详解

    total used free shared buffers cached Mem: -/+ buffers/cache: Swap: 上面是free命令的执行结果,下面我来详细说说其中的含义: Me ...