今天尝试了mysql数据库的longblob字段类型的简单使用,使用mysql数据库load_file插入后一直显示为空。下面开始建表插入数据进行测试。
#创建表
CREATE TABLE images
id INT PRIMARY KEY AUTO_INCREMENT,
data LONGBLOB
);
#插入数据
INSERT INTO images (data) VALUES (LOAD_FILE('/home/liuqi/backup/20240130.jpg'));
#插入字符传
INSERT INTO images (data) VALUES ('LONGBLOB');
执行查询语句: select * from images;发现该字段显示为空。
https://blog.csdn.net/darkdragonking/article/details/134870374网上查询到这篇文章排查方法才知道是因为mysql数据库load_file命令文件最好放置在mysql用户属组,且赋予 对应的权限。
下面我将简单说明主要排查的3个步骤:
1.mysql数据库参数secure-file-priv设置是否正确。
检查命令:show variables like '%secure%';
secure-file-priv取值,分别为 "NULL"、空值、具体路径字符串。不同取值的含义如下表所示取值含义
1).NULL不允许读写任何路径下的文件
2).'' 或没有值允许读写任意路径下的文件,这里我数据库设置为该选项,没有问题。
3).字符串(如允许读写当前路径(如 /tmp)下的文件
2.检查selinux配置
检查核对如上2点后执行查询语句发现还是不行。
3.补充说明:存放图片的路径,建议放到 mysql 属组,且赋予 对应的权限,检查我这里文件存放目录,发现均不属于mysql属组
继续重新把图片文件复制到/var/lib/mysql/目录下如下图(注:这里可以使用mysql用户创建新的目录,存放文件,我这里是放置在mysql安装目录下)
执行sql语句:select LOAD_FILE('/var/lib/mysql/20240130.jpg');即成功了。
最后补充一下blob类型说明:blob字段类型主要用于存储二进制文件,例如 图片、视频、音频、文档等,对于mysql或者mariadb有4个可选的blob类型如下。
1)tinyblob:最大存储数据的长度为255字节
2)blob:最大存储的数据长度为65535字节,也就是65Kb
3)mediumblob:最大存储的数据长度为16777215字节,也就是16Mb
4)longblob:最大存储的数据长度为4,294,967,295(232 - 1)字节,也就是4Gb(超大文件存储)