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>showcreatetabletb_text\G***************************1.row***************************Table:tb_textCreateTable:CREATETABLE`tb_text`(`id`int(11)NOTNULLAUTO_INCREMENTCOMMENT'主键',`a`tinytext,`b`text,`c`varchar(255)DEFAULTNULL,PRIMARYKEY(`id`))ENGINE=InnoDBDEFAULTCHARSET=utf8#创建索引测试发现text类型必须指定前缀长度mysql>altertabletb_textaddindexidx_a(a);ERROR1170(42000):BLOB/TEXTcolumn'a'usedinkeyspecificationwithoutakeylengthmysql>altertabletb_textaddindexidx_b(b);ERROR1170(42000):BLOB/TEXTcolumn'b'usedinkeyspecificationwithoutakeylengthmysql>altertabletb_textaddindexidx_c(c);QueryOK,0rowsaffected(0.04sec)Records:0Duplicates:0Warnings:0mysql>altertabletb_textaddindexidx_b(b(10));QueryOK,0rowsaffected(0.06sec)Records:0Duplicates:0Warnings:0#插入数据测试(repeat函数用于生成重复数据)#正常插入mysql>insertintotb_text(a,b,c)values(repeat('hello',3),repeat('hello',3),repeat('hello',3));QueryOK,1rowaffected(0.01sec)#插入英文字符超标mysql>insertintotb_text(a)values(repeat('hello',52));QueryOK,1rowaffected,1warning(0.01sec)mysql>showwarnings;+---------+------+----------------------------------------+|Level|Code|Message|+---------+------+----------------------------------------+|Warning|1265|Datatruncatedforcolumn'a'atrow1|+---------+------+----------------------------------------+1rowinset(0.00sec)#插入中文超标mysql>insertintotb_text(a)values(repeat('你好',100));QueryOK,1rowaffected,1warning(0.02sec)mysql>showwarnings;+---------+------+----------------------------------------+|Level|Code|Message|+---------+------+----------------------------------------+|Warning|1265|Datatruncatedforcolumn'a'atrow1|+---------+------+----------------------------------------+1rowinset(0.00sec)#查看数据发现数据有所截取tinytext类型最多存储255字节数据mysql>select*fromtb_text;+----+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------+-----------------+|id|a|b|c|+----+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------+-----------------+|1|hellohellohello|hellohellohello|hellohellohello||2|hellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohello|NULL|NULL||3|你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你|NULL|NULL|+----+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------+-----------------+3rowsinset(0.00sec)
通过以上测试,我们注意到,text 类型可存储容量是以字节为单位而不是字符。例如 tinytext 最多存储 255 个字节而不是 255 个字符,在 utf8 字符集下,一个英文字母或数字占用一个字节,而一个中文汉字占用三个字节。也就是说 tinytext 最多存储 255/3=85 个汉字,text 最多存储 65535/3=21845 个汉字。而 varchar(M) 中的 M 指的是字符数,一个英文、数字、汉字都是占用一个字符,即 tinytext 可存储的大小并不比 varchar(255) 多。
以上就是“MySQL中blob和text数据类型怎么用”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注亿速云行业资讯频道。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。