- MySQL 基础
- MySQL - 首页
- MySQL - 简介
- MySQL - 特性
- MySQL - 版本
- MySQL - 变量
- MySQL - 安装
- MySQL - 管理
- MySQL - PHP 语法
- MySQL - Node.js 语法
- MySQL - Java 语法
- MySQL - Python 语法
- MySQL - 连接
- MySQL - Workbench
- MySQL 数据库
- MySQL - 创建数据库
- MySQL - 删除数据库
- MySQL - 选择数据库
- MySQL - 显示数据库
- MySQL - 复制数据库
- MySQL - 数据库导出
- MySQL - 数据库导入
- MySQL - 数据库信息
- MySQL 用户
- MySQL - 创建用户
- MySQL - 删除用户
- MySQL - 显示用户
- MySQL - 修改密码
- MySQL - 授予权限
- MySQL - 显示权限
- MySQL - 收回权限
- MySQL - 锁定用户账户
- MySQL - 解锁用户账户
- MySQL 表
- MySQL - 创建表
- MySQL - 显示表
- MySQL - 修改表
- MySQL - 重命名表
- MySQL - 克隆表
- MySQL - 截断表
- MySQL - 临时表
- MySQL - 修复表
- MySQL - 描述表
- MySQL - 添加/删除列
- MySQL - 显示列
- MySQL - 重命名列
- MySQL - 表锁定
- MySQL - 删除表
- MySQL - 派生表
- MySQL 查询
- MySQL - 查询
- MySQL - 约束
- MySQL - 插入查询
- MySQL - 选择查询
- MySQL - 更新查询
- MySQL - 删除查询
- MySQL - 替换查询
- MySQL - 插入忽略
- MySQL - 插入重复键更新
- MySQL - 插入到选择
- MySQL 运算符和子句
- MySQL - Where 子句
- MySQL - Limit 子句
- MySQL - Distinct 子句
- MySQL - Order By 子句
- MySQL - Group By 子句
- MySQL - Having 子句
- MySQL - AND 运算符
- MySQL - OR 运算符
- MySQL - Like 运算符
- MySQL - IN 运算符
- MySQL - ANY 运算符
- MySQL - EXISTS 运算符
- MySQL - NOT 运算符
- MySQL - 不等于运算符
- MySQL - IS NULL 运算符
- MySQL - IS NOT NULL 运算符
- MySQL - Between 运算符
- MySQL - UNION 运算符
- MySQL - UNION 与 UNION ALL
- MySQL - MINUS 运算符
- MySQL - INTERSECT 运算符
- MySQL - INTERVAL 运算符
- MySQL 连接
- MySQL - 使用连接
- MySQL - 内连接
- MySQL - 左连接
- MySQL - 右连接
- MySQL - 交叉连接
- MySQL - 全连接
- MySQL - 自连接
- MySQL - 删除连接
- MySQL - 更新连接
- MySQL - Union 与 Join
- MySQL 触发器
- MySQL - 触发器
- MySQL - 创建触发器
- MySQL - 显示触发器
- MySQL - 删除触发器
- MySQL - 插入前触发器
- MySQL - 插入后触发器
- MySQL - 更新前触发器
- MySQL - 更新后触发器
- MySQL - 删除前触发器
- MySQL - 删除后触发器
- MySQL 数据类型
- MySQL - 数据类型
- MySQL - VARCHAR
- MySQL - BOOLEAN
- MySQL - ENUM
- MySQL - DECIMAL
- MySQL - INT
- MySQL - FLOAT
- MySQL - BIT
- MySQL - TINYINT
- MySQL - BLOB
- MySQL - SET
- MySQL 正则表达式
- MySQL - 正则表达式
- MySQL - RLIKE 运算符
- MySQL - NOT LIKE 运算符
- MySQL - NOT REGEXP 运算符
- MySQL - regexp_instr() 函数
- MySQL - regexp_like() 函数
- MySQL - regexp_replace() 函数
- MySQL - regexp_substr() 函数
- MySQL 函数与运算符
- MySQL - 日期和时间函数
- MySQL - 算术运算符
- MySQL - 数值函数
- MySQL - 字符串函数
- MySQL - 聚合函数
- MySQL 杂项概念
- MySQL - NULL 值
- MySQL - 事务
- MySQL - 使用序列
- MySQL - 处理重复项
- MySQL - SQL 注入
- MySQL - 子查询
- MySQL - 注释
- MySQL - 检查约束
- MySQL - 存储引擎
- MySQL - 将表导出到 CSV 文件
- MySQL - 将 CSV 文件导入数据库
- MySQL - UUID
- MySQL - 公共表表达式
- MySQL - ON DELETE CASCADE
- MySQL - Upsert
- MySQL - 水平分区
- MySQL - 垂直分区
- MySQL - 游标
- MySQL - 存储函数
- MySQL - Signal
- MySQL - Resignal
- MySQL - 字符集
- MySQL - 校对
- MySQL - 通配符
- MySQL - 别名
- MySQL - ROLLUP
- MySQL - 当天日期
- MySQL - 字面量
- MySQL - 存储过程
- MySQL - Explain
- MySQL - JSON
- MySQL - 标准差
- MySQL - 查找重复记录
- MySQL - 删除重复记录
- MySQL - 选择随机记录
- MySQL - 显示 Processlist
- MySQL - 更改列类型
- MySQL - 重置自动递增
- MySQL - Coalesce() 函数
- MySQL 有用资源
- MySQL - 有用函数
- MySQL - 语句参考
- MySQL - 快速指南
- MySQL - 有用资源
- MySQL - 讨论
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 |