推荐给好友 上一篇 | 下一篇

用C语言往MySQL中存取二进制数据

by falcon <wuzhangjin@gmail.com>
2008-08-02

    MySQL有一个二进制数据类型longblob,可以用来存放二进制数据。那么如何对MySQL进行该类数据的存取呢?
    通过参考资料[2](非常感谢该文作者),发现可以直接通过C语言往MySQL中存取二进制数据。
    下面先创建一个数据表test,该表的data字段为longblog类型。

$ mysql -u USER -pPASSWD
mysql> create database test
mysql> use test
mysql> create table test(id int, file char(255), data longblob);
mysql> quit



    接着,我们来写一个C语言程序,通过该程序往该表的data字段存入一个二进制文件,紧接着从数据库中取出该字段的内容写入另外一个文件中,从而演示longblob数据的存和取操作。

Code:

[Ctrl+A Select All]

    通过分析源代码不难发现,这里跟存取普通的数据差不多,只是通过mysql_real_escape_string函数在二进制数据外面加了一层“东西”。
    okay,开始编译和运行。
    记得编译之前需要安装对应的mysql函数库,在ubuntu 8.10下可以这么安装。

$ sudo apt-get install libmysqlclient15-dev


    编译前还需要设置数据库名、表名、用户名和密码,否则编译后无法正常连接数据库。
    下面开始编译。

$ gcc -o mysql_binary mysql_binary.c -lmysqlclient


    运行一下,

//先删除之前的数据
$ echo "delete from test;" | mysql -u USER -pPASSWD test
// 复制一份mysql_binary为mysql_binary_copy
$ ./mysql_binary mysql_binary mysql_binary_copy
//可以看到两个大小是一样的
$  ls -l mysql_binary mysql_binary_copy
-rwxr-xr-x 1 falcon falcon 10831 2008-08-02 20:55 mysql_binary
-rw-r--r-- 1 falcon falcon 10831 2008-08-02 20:57 mysql_binary_copy



    实际上在postgresql中也可以进行二进制文件的操作,不过不是很方便,如果感兴趣可以参考一下资料[3,4,5,6,7]。

参考和推荐资料

[1] MYSQL中如何存取二进制文件(PHP版)
http://net.stuun.com/database/MySQL/jiqiao/45070.html
[2] C语言实现myql中存取二进制文件
http://linux.chinaitlab.com/MYSQL/383265.html
[3] Storing Binary Data
http://jdbc.postgresql.org/documentation/80/binary-data.html
[4] Chapter 31. Large Objects
http://www.postgresql.org/docs/8.3/interactive/largeobjects.html
[5] PostgreSQL libpq Programming Example
http://www.hungryhacker.com/articles/code/libpq_example.html
[6] ECPG - Embedded SQL in C
http://www.postgresql.org/docs/7.4/static/ecpg.html
[7] Linux下免费数据库PostgreSQL开发入门
http://www-128.ibm.com/developerworks/cn/linux/l-pgsql/index.html

[版权声明]BSD爱好者乐园站内文章,如来源不是互联网,则均系原创或翻译之作,可随意转载,或以此为基础进行演译,但务必以链接形式注明原始出处和作者信息,否则属于侵权行为。另对本站转载他处文章,俱有说明,如有侵权请联系本人,本人将会在第一时间删除侵权文章。
[站长微博]欢迎访问剑心通明的腾讯微博,  BSD爱好者微群,  点击此处开通微博同时与剑心互听

TAG: 二进制
 

评分:0

我来说两句

seccode