千家信息网

MySQL中blob和text数据类型怎么用

发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,今天小编给大家分享一下MySQL中blob和text数据类型怎么用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获
千家信息网最后更新 2025年01月20日MySQL中blob和text数据类型怎么用

今天小编给大家分享一下MySQL中blob和text数据类型怎么用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

1. blob 类型

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

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

2. text 类型

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

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

  • text 类型无须指定长度。

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

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

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

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

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

# 创建测试表 字符集是 utf8mysql> show create table tb_text\G*************************** 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) 多。

以上就是"MySQL中blob和text数据类型怎么用"这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注行业资讯频道。

你好 存储 类型 数据 字符 图片 字节 测试 大小 知识 篇文章 汉字 字段 字符串 数据库 文件 索引 长度 英文 不同 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 数据库做好怎么保存到桌面文件夹 网络技术工程师简历 数据库的设计步骤需求分析 高中毕业能学网络安全吗 移动合作的服务器公司有哪些 服务器哪里可以不备案 网络安全策略汇总 深圳耀星网络技术有限公司电话 数据库和上层应用耦合原则 数据库 判断数据是否存在 生物信息学分析服务器 中铁隧道局在贵阳建数据库项目 本地部署数据库 网络安全2017年新增题 网络安全学科评估结果完整版 茨菇塘街道软件开发培训 威海智慧医养软件开发系统 应用软件开发职业优缺点 微信支付软件开发人 孤胆枪手为什么打不开服务器 数据库做好怎么保存到桌面文件夹 如何在数据库中删除文章 上海软件开发工资高 网络安全法 最高返款 全国青少年网络安全条例 创世宝可梦服务器服装在哪 辽宁信息化软件开发价格有哪些 网络安全学科评估结果完整版 oracle数据库编辑软件 淘宝银行服务器
0