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' 查看配置参数值

mysql 查询 blob 类型数据 mysql查看blob数据_数据

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);

mysql 查询 blob 类型数据 mysql查看blob数据_数据库_02

三、查看数据

执行 select * from test;

mysql 查询 blob 类型数据 mysql查看blob数据_数据_03

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

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

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

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

mysql 查询 blob 类型数据 mysql查看blob数据_数据库_04

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


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