MySQL - BLOB



许多用户应用程序需要存储不同类型的数据,包括文本、图像、文件等等。在 MySQL 数据库中使用 BLOB 允许您将所有这些类型的数据存储在同一个数据库中,从而无需使用单独的文件系统。

MySQL BLOB 数据类型

MySQL BLOB(二进制大型对象)数据类型用于存储二进制数据,例如图像、音频、视频或任何其他类型的二进制文件。BLOB 列可以存储可变长度的二进制数据,使其适用于处理各种大小的文件。

考虑一个通过表单收集用户信息的应用程序。此信息可能包括个人详细信息,例如姓名和地址,以及图像证明,例如 PAN 卡或 Aadhaar 卡。您可以将这些文件作为 BLOB 存储在 MySQL 数据库中,而不是在文件系统中单独管理它们。

语法

以下是为表字段分配 BLOB 数据类型的基本语法:

CREATE TABLE table_name (column_name BLOB,...)

示例

让我们考虑一个基本示例来展示如何为表字段分配 BLOB 数据类型。在这里,我们创建一个名为“demo_table”的表,其中包含两个字段“ID”和“DEMO_FILE”:

CREATE TABLE demo_table (
   ID INT NOT NULL, 
   DEMO_FILE BLOB
);

获得以下输出:

Query OK, 0 rows affected (0.01 sec)

您可以使用以下命令查看表结构:

DESC demo_table;

获得的表如下:

字段 类型 默认值 额外
ID int NULL
DEMO_FILE blob NULL

将数据插入 BLOB 字段

您可以通过使用 LOAD_FILE() 函数将文件加载到 BLOB 字段,将一些值插入到数据库表中。但是,在执行此操作之前,请确保满足以下条件:

  • 文件存在 - 您要插入的文件必须存在于 MySQL 服务器主机位置。要确定所需的位置,您可以使用以下命令中的 secure_file_priv 变量。如果此命令的结果不为空,则要加载的文件必须位于该特定目录中。

  • SHOW VARIABLES LIKE secure_file_priv;
    
  • 指定完整的文件路径 - 使用 LOAD_FILE() 函数时,必须将文件的完整路径作为参数传递,例如“/users/tutorialspoint/file_name.txt”。对于 Windows 用户,请记住在路径中使用双反斜杠作为转义字符(“//users//tutorialspoint//file_name.txt”)。

  • 检查“max_allowed_packet”值 - MySQL 服务器具有一个 max_allowed_packet 变量,该变量确定加载的最大允许文件大小。要检查此变量的值,可以使用以下命令:

  • SHOW VARIABLES LIKE max_allowed_packet;
    

    确保文件大小不超过此变量中指定的值。

  • 授予 FILE 权限 - 确保 MySQL 用户帐户已授予 FILE 权限。要向用户授予文件权限,可以使用以下命令(通常由具有管理员权限的用户执行,例如“root”):

  • GRANT FILE ON *.* TO 'username'@'hostname';
    FLUSH PRIVILEGES;
    
  • 文件可读性 - 最后,确保 MySQL 服务器可以读取该文件。

示例

要将值插入先前创建的表“demo_table”,可以使用以下 INSERT 查询:

INSERT INTO demo_table 
VALUES(1,
LOAD_FILE("C:\\ProgramData\\MySQL\\MySQL Server 8.0\\Uploads\\sample.txt"));

要验证插入,可以使用以下查询从“demo_table”检索数据:

SELECT * FROM demo_table;

我们可以在下面的输出中看到,该表包含“sample.txt”文件中内容的十六进制字符串。您可以将任何类型的文件加载到 MySQL 中,例如图像、多媒体文件、PDF 文档等:

ID DEMO_FILE
1 0x5468697320697320612073616D706C652066696C65

BLOB 数据类型的类型

MySQL 提供四种类型的 BLOB 数据类型,每种数据类型具有不同的最大存储容量。虽然它们都用于存储二进制数据(例如图像或文件),但它们在可以容纳的对象的最大大小方面有所不同。以下是四种 BLOB 数据类型:

  • TINYBLOB - 它最多可以存储 255 个字节或 255 个字符。

  • BLOB - 它最多可以存储 65,535(216 - 1)个字节,相当于 64KB 的数据。

  • MEDIUMBLOB - 它最多可以存储 16,777,215(224 - 1)个字节,或 4GB。

  • LONGBLOB - 它是这些数据类型中最大的,可以存储高达 4,294,967,295 个字节(232 - 1)的对象,或 4GB。

让我们尝试创建具有上述所有类型 BLOB 数据类型的表。

使用 TINYBLOB 数据类型创建表

在此示例中,我们使用 TINYBLOB 数据类型在字段上创建一个名为“demo_tinyblob”的表:

CREATE TABLE demo_tinyblob (ID INT, DEMO_FIELD TINYBLOB);

输出

获得以下输出:

Query OK, 0 rows affected (0.02 sec)

验证

您可以使用以下命令查看表结构:

DESC demo_tinyblob;

获得的表如下:

字段 类型 默认值 额外
ID int NULL
DEMO_FIELD tinyblob NULL

使用 MEDIUMBLOB 数据类型创建表

在这里,我们使用以下查询创建一个名为“demo_mediumblob”的表,该表具有 MEDIUMBLOB 类型的字段:

CREATE TABLE demo_mediumblob (ID INT, DEMO_FIELD MEDIUMBLOB);

输出

以上代码的输出如下:

Query OK, 0 rows affected (0.02 sec)

验证

您可以使用以下命令查看表结构:

DESC demo_mediumblob;

以下是获得的表格:

字段 类型 默认值 额外
ID int NULL
DEMO_FIELD mediumblob NULL

创建带有 LONGBLOB 数据类型的表

在本例中,我们正在创建一个名为“demo_longblob”的表,其中包含一个 LONGBLOB 类型的字段:

CREATE TABLE demo_longblob (ID INT, DEMO_FIELD LONGBLOB);

输出

以下是生成的输出:

Query OK, 0 rows affected (0.02 sec)

验证

您可以使用以下命令查看表结构:

DESC demo_longblob;

生成的表如下所示:

字段 类型 默认值 额外
ID int NULL
DEMO_FIELD longblob NULL
广告