今天尝试了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;发现该字段显示为空。

Mysql数据库longblob字段类型插入图片文件显示为空、插入文字内容可以显示。_mysql数据库

https://blog.csdn.net/darkdragonking/article/details/134870374网上查询到这篇文章排查方法才知道是因为mysql数据库load_file命令文件最好放置在mysql用户属组,且赋予 对应的权限。

下面我将简单说明主要排查的3个步骤:

1.mysql数据库参数secure-file-priv设置是否正确

检查命令:show variables like '%secure%';

Mysql数据库longblob字段类型插入图片文件显示为空、插入文字内容可以显示。_mysql数据库_02

secure-file-priv取值,分别为 "NULL"、空值、具体路径字符串。不同取值的含义如下表所示取值含义

1).NULL不允许读写任何路径下的文件

2).'' 或没有值允许读写任意路径下的文件,这里我数据库设置为该选项,没有问题。

3).字符串(如允许读写当前路径(如 /tmp)下的文件

2.检查selinux配置

修改检查 /etc/selinux/config 文件中的  SELINUX=disabled

Mysql数据库longblob字段类型插入图片文件显示为空、插入文字内容可以显示。_mysql_03

修改检查 /etc/sysconfig/selinux 文件中的  SELINUX=disabled

Mysql数据库longblob字段类型插入图片文件显示为空、插入文字内容可以显示。_mysql_04

检查核对如上2点后执行查询语句发现还是不行。

Mysql数据库longblob字段类型插入图片文件显示为空、插入文字内容可以显示。_mysql_05

3.补充说明:存放图片的路径,建议放到 mysql 属组,且赋予 对应的权限,检查我这里文件存放目录,发现均不属于mysql属组

Mysql数据库longblob字段类型插入图片文件显示为空、插入文字内容可以显示。_mysql_06

继续重新把图片文件复制到/var/lib/mysql/目录下如下图(注:这里可以使用mysql用户创建新的目录,存放文件,我这里是放置在mysql安装目录下)

Mysql数据库longblob字段类型插入图片文件显示为空、插入文字内容可以显示。_取值_07

执行sql语句:select LOAD_FILE('/var/lib/mysql/20240130.jpg');即成功了。

Mysql数据库longblob字段类型插入图片文件显示为空、插入文字内容可以显示。_mysql数据库_08

最后补充一下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(超大文件存储)