一起聊聊MySQL中blob和text数据类型(示例详解)

本篇文章我们来看一下mysql中的blob和text数据类型,blob是一个可以存储二进制文件的容器,text类型同char、varchar 类似,都可用于存储字符串,下面我们就一起来看一下这两个数据类型的相关知识,希望对大家有帮助。

一起聊聊MySQL中blob和text数据类型(示例详解)

  1. blob 类型

blob(binary large object) 是一个可以存储二进制文件的容器,主要用于存储二进制大对象,例如可以存储图片,音视频等文件。按照可存储容量大小不同来分类,blob 类型可分为以下四种:

08.png

其中最常用的就是 blob 字段类型了,最多可存储 65KB 大小的数据,一般可用于存储图标或 logo 图片。不过数据库并不适合直接存储图片,如果有大量存储图片的需求,请使用对象存储或文件存储,数据库中可以存储图片路径来调用。

  2. text 类型

text 类型同 char、varchar 类似,都可用于存储字符串,一般情况下,遇到存储长文本字符串的需求时可以考虑使用 text 类型。按照可存储大小区分,text 类型同样可分为以下四种:

09.png

不过在日常场景中,存储字符串还是尽量用 varchar ,只有要存储长文本数据时,可以使用 text 类型。对比 varchar ,text 类型有以下特点:

text 类型无须指定长度。

Symanto Text Insights Symanto Text Insights

基于心理语言学分析的数据分析和用户洞察

Symanto Text Insights 60 查看详情 Symanto Text Insights

若数据库未启用严格的 sqlmode ,当插入的值超过 text 列的最大长度时,则该值会被截断插入并生成警告。

text 类型字段不能有默认值。

varchar 可直接创建索引,text 字段创建索引要指定前多少个字符。

text 类型检索效率比 varchar 要低。

下面我们来具体测试下 text 类型的使用方法:

# 创建测试表 字符集是 utf8mysql> show create table tb_textG*************************** 1. row ***************************       Table: tb_textCreate Table: CREATE TABLE `tb_text` (  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',  `a` tinytext,  `b` text,  `c` varchar(255) DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8# 创建索引测试 发现text类型必须指定前缀长度mysql> alter table tb_text add index idx_a (a);ERROR 1170 (42000): BLOB/TEXT column 'a' used in key specification without a key lengthmysql> alter table tb_text add index idx_b (b); ERROR 1170 (42000): BLOB/TEXT column 'b' used in key specification without a key lengthmysql> alter table tb_text add index idx_c (c);Query OK, 0 rows affected (0.04 sec)Records: 0  Duplicates: 0  Warnings: 0mysql> alter table tb_text add index idx_b (b(10));Query OK, 0 rows affected (0.06 sec)Records: 0  Duplicates: 0  Warnings: 0# 插入数据测试(repeat函数用于生成重复数据)# 正常插入mysql> insert into tb_text  (a,b,c) values (repeat('hello',3),repeat('hello',3),repeat('hello',3));Query OK, 1 row affected (0.01 sec)# 插入英文字符超标mysql> insert into tb_text  (a) values (repeat('hello',52));Query OK, 1 row affected, 1 warning (0.01 sec)mysql> show warnings;+---------+------+----------------------------------------+| Level   | Code | Message                                |+---------+------+----------------------------------------+| Warning | 1265 | Data truncated for column 'a' at row 1 |+---------+------+----------------------------------------+1 row in set (0.00 sec)# 插入中文超标mysql>  insert into tb_text  (a) values (repeat('你好',100));Query OK, 1 row affected, 1 warning (0.02 sec)mysql> show warnings;+---------+------+----------------------------------------+| Level   | Code | Message                                |+---------+------+----------------------------------------+| Warning | 1265 | Data truncated for column 'a' at row 1 |+---------+------+----------------------------------------+1 row in set (0.00 sec)# 查看数据 发现数据有所截取 tinytext 类型最多存储255字节数据mysql> select * from tb_text;+----+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------+-----------------+| id | a | b | c |+----+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------+-----------------+|  1 | hellohellohello | hellohellohello | hellohellohello ||  2 | hellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohello | NULL| NULL||  3 | 你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你| NULL| NULL|+----+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------+-----------------+3 rows in set (0.00 sec)

通过以上测试,我们注意到,text 类型可存储容量是以字节为单位而不是字符。例如 tinytext 最多存储 255 个字节而不是 255 个字符,在 utf8 字符集下,一个英文字母或数字占用一个字节,而一个中文汉字占用三个字节。也就是说 tinytext 最多存储 255/3=85 个汉字,text 最多存储 65535/3=21845 个汉字。而 varchar(M) 中的 M 指的是字符数,一个英文、数字、汉字都是占用一个字符,即 tinytext 可存储的大小并不比 varchar(255) 多。

总结:

本篇文章介绍了 blob 及 text 字段类型相关知识。虽然数据库规范中一般不推荐使用 blob 及 text 类型,但由于一些历史遗留问题或是某些场景下,还是会用到这两类数据类型的。这篇文章仅当做个记录了,使用到的时候可以参考下。

推荐学习:mysql视频教程

以上就是一起聊聊MySQL中blob和text数据类型(示例详解)的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/285496.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
win11新建本地管理员账户方法
上一篇 2026年10月19日 10:23:01
小米模块光学系统预研技术全球首发:手机外挂镜头 定制M4/3传感器
下一篇 2025年11月8日 23:50:25

相关推荐

  • 一起聊聊mysql中的账户和权限

    一起聊聊mysql中的账户和权限一起聊聊mysql中的账户和权限一起聊聊mysql中的账户和权限一起聊聊mysql中的账户和权限

    本篇文章给大家带来了mysql中账户的权限的相关问题,当用户执行任何数据库操作时,服务器将会验证用户是否具有相应的权限,例如查询表需要 select 权限,删除对象需要 drop 权限。希望对大家有帮助。 当客户端连接 MySQL 服务器时,必须提供有效的身份认证,例如用户名和密码。当用户执行任何数…

    2026年10月19日 • 用户投稿
    100
  • 实例分享之MySQL 8.0 timestamp引发的问题

    实例分享之MySQL 8.0 timestamp引发的问题实例分享之MySQL 8.0 timestamp引发的问题实例分享之MySQL 8.0 timestamp引发的问题实例分享之MySQL 8.0 timestamp引发的问题

    本篇文章给大家带来了mysql中关于字段默认值可能会出现的相关问题,希望对大家有帮助。 今天业务反馈了一个问题,modify_time字段不允许为null,而业务反馈这个字段是设置了默认值的,具体的业务报错信息如下所示: 从报错信息看,可能是modify_time字段没有设置默认值或默认值设置的不正…

    2026年10月19日 • 用户投稿
    100
  • yi框架用什么软件比较好 yi框架使用软件推荐

    yi框架用什么软件比较好 yi框架使用软件推荐yi框架用什么软件比较好 yi框架使用软件推荐yi框架用什么软件比较好 yi框架使用软件推荐yi框架用什么软件比较好 yi框架使用软件推荐

    文章首段摘要:在选择开发 Yi 框架应用程序的软件时,需要考虑多个因素。虽然原生移动应用程序开发工具(如 XCode 和 Android Studio)可以提供强大的控制和灵活性,但跨平台框架(如 React Native 和 Flutter)凭借其编写一次,即可部署到多个平台的优点而越来越受欢迎。…

    2026年10月19日 • 用户投稿
    100
  • 一起聊聊MySQL主从延时的处理方案

    一起聊聊MySQL主从延时的处理方案一起聊聊MySQL主从延时的处理方案一起聊聊MySQL主从延时的处理方案一起聊聊MySQL主从延时的处理方案

    本篇文章给大家带来了关于mysql中主从延时处理方案的相关知识,mysql主从复制,读写分离是互联网常见的数据库架构,该架构最令人诟病的地方就是,在数据量较大并发量较大的场景下,主从延时会比较严重。希望对大家有帮助。 为什么主从延时这么大? 答:MySQL使用单线程重放RelayLog。 应该怎么优…

    2026年10月19日 • 用户投稿
    300
  • mysql的表名区分大小写吗

    mysql的表名区分大小写吗mysql的表名区分大小写吗mysql的表名区分大小写吗mysql的表名区分大小写吗

    mysql在linux中表名区分大小写,mysql在Windows中表名不区分大小写;可以在MySQL的配置文件“my.ini [mysqld]”中增加一行“ower_case_table_names = 参数”来设置是否区分大小写。 本教程操作环境:windows10系统、mysql8.0.22版…

    2026年10月19日 • 用户投稿
    100
  • mysql怎样查询今天的数据

    mysql怎样查询今天的数据mysql怎样查询今天的数据mysql怎样查询今天的数据mysql怎样查询今天的数据

    在mysql中,可以利用select语句配合“to_days()”和now()函数查询今天的数据,语法为“select * from 表名 where to_days(时间字段名)=to_days(now());”。 本教程操作环境:windows10系统、mysql8.0.22版本、Dell G3…

    2026年10月19日 • 用户投稿
    100
  • mysql怎样修改用户

    mysql怎样修改用户mysql怎样修改用户mysql怎样修改用户mysql怎样修改用户

    方法:1、利用“RENAME USER”语句修改用户名,语法为“RENAME USER 旧用户名 TO 新用户名”;2、利用“SET PASSWORD”语句修改用户密码,语法为“SET PASSWORD=PASSWORD(新用户密码)”。 本教程操作环境:windows10系统、mysql8.0.2…

    2026年10月19日 • 用户投稿
    200
  • mysql怎样修改内容

    mysql怎样修改内容mysql怎样修改内容mysql怎样修改内容mysql怎样修改内容

    在mysql中,可以利用UPDATE命令修改内容,该命令用于修改或更新MySQL中的数据,利用该命令可以同时修改一个或多个内容,语法为“UPDATE 表名 SET field1=new-value1,field2=new-value2”。 本教程操作环境:windows10系统、mysql8.0.2…

    2026年10月19日 • 用户投稿
    100
  • mysql怎样查询后合并

    mysql怎样查询后合并mysql怎样查询后合并mysql怎样查询后合并mysql怎样查询后合并

    在mysql中,可以利用UNION操作符实现查询后合并结果的效果,该操作符的作用就是连接两个以上的SELECT语句的结果组合到一个结果集合中,语法为“SELECT查询语句1 UNION [ALL] SELECT查询语句2”。 本教程操作环境:windows10系统、mysql8.0.22版本、Del…

    2026年10月19日 • 用户投稿
    100
  • MySQL如何使用UNION合并结果 结果集合并的注意事项

    MySQL如何使用UNION合并结果 结果集合并的注意事项MySQL如何使用UNION合并结果 结果集合并的注意事项MySQL如何使用UNION合并结果 结果集合并的注意事项MySQL如何使用UNION合并结果 结果集合并的注意事项

    union合并结果集要求列数和数据类型匹配,union会去重而union all保留重复行,union all效率更高;使用order by和limit需在每个select内分别指定,最后再整体排序;数据类型不匹配时应使用cast函数显式转换。1. 列数和数据类型必须一致;2. union自动去重,…

    2026年10月19日 • 用户投稿
    100
  • 带你搞懂MySQL字符集和比较规则

    带你搞懂MySQL字符集和比较规则带你搞懂MySQL字符集和比较规则带你搞懂MySQL字符集和比较规则带你搞懂MySQL字符集和比较规则

    本篇文章给大家带来了关于mysql中字符集比较的相关知识,其中包括了mysql中支持的字符集和排序规则,希望对大家有帮助。 字符集和比较规则简介 字符集简介 我们知道在计算机中只能存储二进制数据,那该怎么存储字符串呢?当然是建立字符与二进制数据的映射关系了,建立这个关系最起码要搞清楚两件事儿: 你要…

    2026年10月19日 • 用户投稿
    100
  • 一起聊聊MySQL基础之触发器和事件

    一起聊聊MySQL基础之触发器和事件一起聊聊MySQL基础之触发器和事件一起聊聊MySQL基础之触发器和事件一起聊聊MySQL基础之触发器和事件

    本篇文章给大家带来了关于mysql中触发器和事件的相关知识,其中包括触发器使用注意事项、查看和删除事件、事件使用注意事项等等,希望对大家有帮助。 触发器 我们使用MySQL的过程中可能会有下边这些需求: 在向t1表插入或更新数据之前对自动对数据进行校验,要求m1列的值必须在1~10之间,校验规则如下…

    2026年10月19日 • 用户投稿
    200
  • mysql存储过程中怎么给变量赋值

    mysql存储过程中怎么给变量赋值mysql存储过程中怎么给变量赋值mysql存储过程中怎么给变量赋值mysql存储过程中怎么给变量赋值

    mysql存储过程中给变量赋值的方法:1、利用DECLARE关键字,语法“DECLARE 变量名 类型 DEFAULT 默认值;”;2、利用SET关键字,语法“SET 变量名 = 赋值表达式;”。 本教程操作环境:windows7系统、mysql8版本、Dell G3电脑。 在mysql的存储过程和…

    2026年10月19日 • 用户投稿
    000
  • mysql存储过程的游标是什么

    mysql存储过程的游标是什么mysql存储过程的游标是什么mysql存储过程的游标是什么mysql存储过程的游标是什么

    在mysql存储过程中,游标也称为光标,是一个存储在DBMS服务器上的数据库查询,是检索操作返回一组结果集,一般用于对检索出来的数据进行前进或者后退操作。 本教程操作环境:windows7系统、mysql8版本、Dell G3电脑。 在 MySQL 中,存储过程或函数中的查询有时会返回多条记录,而使…

    2026年10月19日 • 用户投稿
    200
  • thinkphp如何使用

    thinkphp如何使用thinkphp如何使用thinkphp如何使用thinkphp如何使用

    ThinkPHP 是一款 PHP MVC 框架,用于开发 Web 应用。使用步骤包括:安装 ThinkPHP、配置数据库、定义模型、定义控制器、定义视图、设置路由和运行。具体步骤为:1. 安装 ThinkPHP;2. 配置数据库;3. 定义模型;4. 定义控制器;5. 定义视图;6. 设置路由;7.…

    2026年10月19日 • 用户投稿
    100
  • 怎么查询mysql的字符集

    怎么查询mysql的字符集怎么查询mysql的字符集怎么查询mysql的字符集怎么查询mysql的字符集

    方法:1、“show charset”语句,查看MYSQL所支持的字符集;2、“show create database 库名G”语句,查看库的字符集;3、“show full columns from 表名”,查看表中所有列的字符集。 本教程操作环境:windows7系统、mysql8版本、Del…

    2026年10月19日 • 用户投稿
    100
  • mysql查询结果怎么合并

    mysql查询结果怎么合并mysql查询结果怎么合并mysql查询结果怎么合并mysql查询结果怎么合并

    在mysql中,可以利用UNION操作符来合并查询结果,该操作符用于将两个以上的SELECT语句的查询结果合并到一起,然后去除掉相同的记录;语法“查询语句1 union 查询语句2 union ….”。 本教程操作环境:windows7系统、mysql8版本、Dell G3电脑。 在my…

    2026年10月19日 • 用户投稿
    100
  • mysql怎么将查询结果赋给变量

    mysql怎么将查询结果赋给变量mysql怎么将查询结果赋给变量mysql怎么将查询结果赋给变量mysql怎么将查询结果赋给变量

    mysql将查询结果赋给变量的方法:1、使用“DECLARE 变量名 类型 [DEFAULT 默认值];”语句创建变量;2、使用“SELECT 字段名 INTO 变量名 FROM 表名 WEHRE 查询条件;”语句将查询结果赋值给变量。 本教程操作环境:windows7系统、mysql8版本、Del…

    2026年10月19日 • 用户投稿
    100
  • 读完搞懂MySQL持久化和回滚(图文详解)

    读完搞懂MySQL持久化和回滚(图文详解)读完搞懂MySQL持久化和回滚(图文详解)读完搞懂MySQL持久化和回滚(图文详解)读完搞懂MySQL持久化和回滚(图文详解)

    本篇文章给大家带来了mysql中关于持久化和回滚的相关知识,希望对大家有帮助。 redo log 事务的支持是数据库区分文件系统的重要特征之一,事务的四大特性: 原子性:所有的操作要么都做,要么都不做,不可分割。一致性:数据库从一种状态变成另一种状态的的结果最终是一致的,比如A给B转账500,A最终…

    2026年10月19日 • 用户投稿
    200
  • mysql中的事务是什么

    mysql中的事务是什么mysql中的事务是什么mysql中的事务是什么mysql中的事务是什么

    在mysql中,事务是一种机制、一个操作序列,是访问和更新数据库的程序执行单元。事务中包含一个或多个数据库操作命令,会把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么都执行,要么都不执行。 本教程操作环境:windows7系统、mysql5.6版本、Dell G3电脑。 …

    2026年10月19日 • 用户投稿
    300

发表回复

登录后才能评论
关注微信