MySQL - BLOB 数据类型
许多用户应用程序需要存储不同类型的数据,包括文本、图像、文件等。在 MySQL 数据库中使用 BLOB 可以将所有这些类型的数据存储在同一个数据库中,从而无需单独的文件系统。
MySQL BLOB 数据类型
MySQL BLOB(二进制大对象)数据类型用于存储二进制数据,例如图像、音频、视频或任何其他类型的二进制文件。 BLOB 列可以存储可变长度的二进制数据,因此适合处理各种大小的文件。
假设有一个应用程序通过表单收集用户信息。这些信息可能包括个人信息,例如姓名和地址,以及 PAN 卡或 AADHAR 卡等图像证明。您无需在文件系统中单独管理这些文件,而是可以将它们作为 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;
获取的表结构如下 -
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
ID | int | NO | NULL | ||
DEMO_FILE | blob | YES | NULL |
将数据插入 BLOB 字段
您可以使用 LOAD_FILE() 函数将文件加载到 BLOB 字段,从而将一些值插入数据库表。但是,在执行此操作之前,请确保满足以下条件 -
文件存在性 -要插入的文件必须存在于 MySQL 服务器主机位置。要确定所需的位置,您可以使用以下命令中的 secure_file_priv 变量。如果此命令的结果不为空,则要加载的文件必须位于该特定目录中。
显示类似 secure_file_priv 的变量;
指定完整文件路径 − 使用 LOAD_FILE() 函数时,必须将文件的完整路径作为参数传递,例如"/users/tutorialspoint/file_name.txt"。对于 Windows 用户,请记住在路径中使用双反斜杠作为转义符 ('//users//tutorialspoint//file_name.txt')。
检查"max_allowed_packet"值 − MySQL 服务器有一个 max_allowed_packet 变量,用于确定允许加载的最大文件大小。要检查此变量的值,您可以使用以下命令 −
显示类似 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 数据类型的表
在本例中,我们将创建一个名为"demo_tinyblob"的表,并在某个字段上添加 TINYBLOB 数据类型 -
CREATE TABLE demo_tinyblob (ID INT, DEMO_FIELD TINYBLOB);
输出
以下是得到的输出 -
Query OK, 0 rows affected (0.02 sec)
验证
您可以使用以下命令查看表结构 -
DESC demo_tinyblob;
得到的表如下 -
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
ID | int | YES | NULL | ||
DEMO_FIELD | tinyblob | YES | 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;
以下是获取到的表 -
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
ID | int | YES | NULL | ||
DEMO_FIELD | mediumblob | YES | 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;
生成的表如下所示 -
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
ID | int | YES | NULL | ||
DEMO_FIELD | longblob | YES | NULL |