Mysql LONGBLOB 类型存储二进制数据 (修改+调试+整理)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql LONGBLOB 类型存储二进制数据 (修改+调试+整理)相关的知识,希望对你有一定的参考价值。

参考技术A 在DBMS中线要创建数据库test,table
bintest,data字段数据类型用LONGBLOB即可测试
//测试文件c:\\test.iso,你可以找任何一个文件修改为即可,我找的是一个exe程序,修改为test.iso而已
//最大测试过加入文件大小为650M(一个正真的iso文件)
//注意:还要修改my.ini文件中的max_allowed_packet字段,我设置的是
复制代码
代码如下:
//max_allowed_packet
=
1024M
//#define
host
"localhost"
//mysql
server
//#define
username
"root"
//#define
password
"674800"
//#define
database
"test"
//int
port
=
3306;
//
Mysql3.cpp
:
Defines
the
entry
point
for
the
console
application.
//
#include
"stdafx.h"
#include
<Winsock2.h>
#include
<mysql.h>
#include
<string.h>
#include
<stdio.h>
#include
<stdlib.h>
#include
<sys/types.h>
#include
<sys/stat.h>
#include
<fcntl.h>
#pragma
comment(lib,"libmysql.lib")
#define
INSERT_QUERY
"INSERT
INTO
bintest(id,
data)
VALUES(NULL,
?)"
#define
host
"localhost"
//mysql
server
#define
username
"root"
#define
password
"674800"
#define
database
"test"
int
port
=
3306;
int
get_file_size(char
*path,
off_t
*size)

struct
stat
file_stats;
if(stat(path,
&file_stats))
return
-1;
*size
=
file_stats.st_size;
return
0;

void
test()

MYSQL_BIND
bind[1];
unsigned
long
length;
char*
pos
=
NULL;
off_t
size;
FILE*
fp;
char*
filename
=
"c:\\test.iso";
if
((get_file_size(filename,
&size))
==
-1)
//得到文件的大小

perror("get
file
size"
);
exit(1);

if
((pos
=
(char
*)malloc(sizeof(char)*(size+1)))
==
NULL)

perror("malloc
buf"
);
exit(1);

if
((fp
=
fopen(filename,
"rb"
))
==
NULL)
//读文件

perror("fopen
file"
);
exit(1);

if
((fread(pos,
1,
size,
fp))
<
0)
//读文件失败

perror("fread
file"
);
exit(1);

MYSQL
*mysql
=
mysql_init(NULL);
//mysql
初始化
if
(!mysql)
return;
if
(!mysql_real_connect(mysql,host,username,password,"test",port,NULL,0))//链接服务器

int
ret
=
mysql_errno(mysql);
mysql_close(mysql);
return;

MYSQL_STMT
*stmt
=
mysql_stmt_init(mysql);
if
(!stmt)

fprintf(stderr,
"
mysql_stmt_init(),
out
of
memory\n");
exit(0);

if
(mysql_stmt_prepare(stmt,
INSERT_QUERY,
strlen(INSERT_QUERY)))

fprintf(stderr,
"\n
mysql_stmt_prepare(),
INSERT
failed");
fprintf(stderr,
"\n
%s",
mysql_stmt_error(stmt));
exit(0);

memset(bind,
0,
sizeof(bind));
//bind[0].buffer_type=
MYSQL_TYPE_STRING;
//bind[0].buffer_type
=
MYSQL_TYPE_LONG;
bind[0].buffer
=
pos;
//bind[0].buffer_type
=
MYSQL_TYPE_TINY;
bind[0].buffer_type
=
MYSQL_TYPE_BLOB;
bind[0].length=
&length;
bind[0].is_null=
0;
/*
Bind
the
buffers
*/
if
(mysql_stmt_bind_param(stmt,
bind))

fprintf(stderr,
"\n
param
bind
failed");
fprintf(stderr,
"\n
%s",
mysql_stmt_error(stmt));
exit(0);

int
rc
=0;
/*
Supply
data
in
chunks
to
server
*/
if
(mysql_stmt_send_long_data(stmt,0,
pos,
size))

fprintf(stderr,
"\n
send_long_data
failed");
fprintf(stderr,
"\n
%s",
mysql_stmt_error(stmt));
exit(0);

//
pos
+=
size;
/*
Supply
the
next
piece
of
data
*/
if
(mysql_stmt_send_long_data(stmt,0,
pos,
size))

fprintf(stderr,
"\n
send_long_data
failed");
fprintf(stderr,
"\n
%s",
mysql_stmt_error(stmt));
exit(0);

/*
Now,
execute
the
query
*/
if
(mysql_stmt_execute(stmt))

fprintf(stderr,
"\n
mysql_stmt_execute
failed");
fprintf(stderr,
"\n
%s",
mysql_stmt_error(stmt));
exit(0);


int
main()

test();
//sleep(1);
return
0;

运行结果:

mysql中text可以存储多少个字

参考技术A

允许长度0~65535字节。

text是Mysql中的一种字符串类型,用于存储长文本数据。

有4种text类型:tinytext、text、mediumtext和longtext。这些对应4种blob类型,有相同的最大长度和存储需求。

blob是一个二进制大对象,可以容纳可变数量的数据。有4种blob类型:tinyblob、blob、mediumblob和longblob。它们只是可容纳值的最大长度不同。

blob 可以储存图片,text不行,text只能储存纯文本文件。在blob和text类型之间的唯一差别是对blob值的排序和比较以大小写敏感方式执行,而对 text值是大小写不敏感的。如果要储存中文则选择text

未运行在严格模式时,如果为blob或text列分配一个超过该列类型的最大长度的值,值被截取以保证适合。如果截掉的字符不是空格,将会产生一条警告。使用严格SQL模式,会产生错误,并且值将被拒绝而不是截取并给出警告。Mysql单行最大数据量为64K。

扩展资料

varchar只能用63352/65533个字节,但是text可以65535个字节全部用起来;

text不允许有默认值,varchar允许有默认值;

Strict Mode下有以下限制:

1、不支持对not null字段插入null值

2、不支持对自增长字段插入”值,可插入null值

3、不支持 text 字段有默认值

以上是关于Mysql LONGBLOB 类型存储二进制数据 (修改+调试+整理)的主要内容,如果未能解决你的问题,请参考以下文章

mysql

longblob和longtext的区别

mysql字段加密

我的MYSQL学习心得 数据类型

mysql中的longblob对应java中的啥类型

mysql bolb对应java啥类型