MySQL 中 blob 和 text 数据类型详解
前面文章我们介绍过一些常用数据类型的用法,比如 int、char、varchar 等。一直没详细介绍过 blob 及 text 类型,虽然这两类数据类型不太常用,但在某些场景下还是会用到的。本篇文章将主要介绍 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_text
Create 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 length
mysql alter table tb_text add index idx_b (b);
ERROR 1170 (42000): BLOB/TEXT column b used in key specification without a key length
mysql alter table tb_text add index idx_c (c);
Query OK, 0 rows affected (0.04 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql 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 中 blob 和 text 数据类型详解的文章就介绍到这了,更多相关MySQL blob和text 内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
我想要获取技术服务或软件
服务范围:MySQL、ORACLE、SQLSERVER、MongoDB、PostgreSQL 、程序问题
服务方式:远程服务、电话支持、现场服务,沟通指定方式服务
技术标签:数据恢复、安装配置、数据迁移、集群容灾、异常处理、其它问题
本站部分文章参考或来源于网络,如有侵权请联系站长。
数据库远程运维 MySQL 中 blob 和 text 数据类型详解
相关文章
- 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用户IP记录功能详解(mysql用户ip)
- MySQL学习不常见写法详解(mysql中不包含的写法)
- MySQL中的错误代码1267详解(mysql 中1267)
- 解除 MySQL 非空约束的方法详解(mysql中删除非空约束)
- MySQL三表联查语法详解(mysql三表联查语法)
- MySQL的Year用法详解轻松提取年份信息(mysql year使用)
- GET MYSQL 免费下载并破解MySQL数据库软件(mysql下载和破解)
- MySQL无法访问如何解决(mysql不被允许访问)