MySQL数据库中插入非结构化数据(BLOB字段)的方法

MySQL中Blob是一个二进制的对象,它是一个可以存储非结构化数据的容器(如图片、视频、文档等),且能容纳不同大小的数据

Mysql中有四种不同的Blob类型:
① TinyBlob类型 最大能容纳255B的数据
② Blob类型 最大能容纳65KB的
③ MediumBlob类型 最大能容纳16MB的数据
④ LongBlob类型 最大能容纳4GB的数据

一、建立测试表,包含blob字段 

CREATE TABLE test
(
id INTEGER NOT NULL PRIMARY KEY,
data LONGBLOB
);

二、插入数据

使用 LOAD_FILE函数 插入非结构化数据(图片、视频、文本)

insert into test values(1, LOAD_FILE('/var/lib/mysql-files/a.txt'));

Mysql中使用 LOAD_FILE函数的注意事项:

1,若没有加载成功会返回空(NULL)
2,必须设置参数 secure_file_priv,加载的文件必须需要放在该参数指定的目录
3,load的文件的大小(LENGTH)不能大于 max_allowed_packet

mysql配置 secure_file_priv

1、可以使用 show variables like 'secure_file_priv' 查看配置参数值

2、secure_file_priv不能使用set global 方式修改,需要再my.ini或my.conf配置文件中修改,重启mysql服务后生效

3、

secure_file_priv 设置值为 NULL 时,表示限制mysqld不允许导入或导出。
secure_file_priv 设置值为 /dir目录时,表示限制mysqld只能在/dir目录中执行导入导出,其他目录不能执行。
secure_file_priv 没有值时,表示不限制mysqld在任意目录的导入导出,不建议这么设置,不安全

测试插入十六进制的字节串

insert into test values(2, 0x01020304FFFFFFFF0000000CAACB0000);

测试插入常规字符串和数字数据

insert into test values(3, 'hellworld');

insert into test values(4, 0);

三、查看数据

执行 select * from test;

第一条数据是我们注入的文本信息,可以正常显示

第二条数据是我们插入的十六进制字符串没有正常显示

第三、四条我们插入的常规字符串和数字可以正常显示 

 这时候需要用到一个hex()函数来看Blob类型的数据,查询结果如下:

这回第二条数据正常了,可是其他数据为什么又看起来不一样了呢,因为第4条插入语句的中数据0,实际上是被当做字符串存储的,而字符’0’的ASCII码是十进制的48,表示成十六进制就是0x30,也就是上面查到的这样,同理这个打错了的字符串’hellworld’也是这样存储的

HEX()函数:将一个字符串或数字转换为十六进制格式的字符串
UNHEX()函数:把十六进制格式的字符串转化为二进制的数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值