【MySQL】文本字符串类型与二进制字符串类型

460 阅读7分钟

本人已参与「新人创作礼」活动,一起开启掘金创作之路。

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第12天,点击查看活动详情

目录

02A88215.gif 今天阿文介绍的内容:

  • 文本字符串类型
  • 二进制字符串类型

1.文本字符串类型

字符串类型用来存储字符串数据,除了可以存储字符串数据之外,还可以存储其他数据,比如图片和声音的二进制数据。MySQL支持两类字符型数据:文本字符串二进制字符串。文本字符串可以进行区分或者不区分大小写的串比较,还可以进行模式匹配查找。在MySQL中,文本字符串类型是指CHAR、VARCHAR、TEXT、ENUM和SET。 下表列出了MySQL中的文本字符串数据类型。

Snipaste_2022-09-04_09-40-29.png

1.1CHAR和VARCHAR类型

CHAR(M)为固定长度字符串,在定义时指定字符串列长。当保存时在右侧填充空格,以达到指定的长度。M表示字符串长度,M的范围是0 ~ 255个字符。例如,CHAR(4)定义了一个固定长度的字符串列, 其包含的字符个数最大为4。当检索到CHAR值时,尾部的空格将被删除。VARCHAR(M)是长度可变的字符串,M表示最大字符串长度。M的范围是0 ~ 65535。VARCHAR的最大实际长度由最长的行的大小和使用的字符集确定,而其实际占用的空间为字符串的实际长度加1。例如,VARCHAR(50)定义了一个最大长度为50的字符串,如果插入的字符串只有10个字符,则实际存储的字符串为10个字符和一个字符串结束字符。VARCHAR在值保存和检索时尾部的空格仍保留

1.2TEXT类型

TEXT列保存非二进制字符串,如文章内容、评论等。当保存或查询TEXT列的值时,不删除尾部空格。Text类型分为4种:TINYTEXTTEXTMEDIUMTEXTLONGTEXT。不同的TEXT类型的存储空间和数据长度不同。

  • TINYTEXT最大长度为255个字符的TEXT列。

  • TEXT最大长度为65535个字符的TEXT列。

  • MEDIUMTEXT最大长度为16777215个字符的TEXT列。

  • LONGTEXT最大长度为4294967295个或4GB字符的TEXT列。

1.3ENUM类型

ENUM是一个字符串对象,其值为表创建时在列规定中枚举的一列值。语法格式如下:

字段名 ENUM('值1','值2',...,'值n');
  • “字段名”指将要定义的字段,
  • “值n”指枚举列表中的第n个值。

注意:

ENUM类型的字段在取值时,只能在指定的枚举列表中取,而且一次只能取一个.创建的成员中有空格时,其尾部的空格将自动被删除。ENUM值在内部用整数表示,并且每个枚举值均有一个索引值:列表值所允许的成员值从1开始编号,MySQL存储的就是这个索引编号。枚举最多可以有65535个元素。

提示:

ENUM列总有一个默认值:如果将ENUM列声明为NULL,NULL值则为该列的一个有效值,并且默认值为NULL;如果ENUM列被声明为NOT NULL,其默认值为允许的值列表的第1个元素。

1.4SET类型

SET是一个字符串对象,可以有零或多个值。SET列最多可以有64个成员,其值为表创建时规定的一列值。指定包括多个SET成员的SET列值时,各成员之间用逗号(,)间隔开。语法格式如下:

 SET('值1','值2',...,'值n')

与ENUM类型相同,SET值在内部用整数表示,列表中每一个值都有一个索引编号。当创建表时,SET成员值的尾部空格将自动被删除。与ENUM类型不同的是,ENUM类型的字段只能从定义的列值中选择一个值插入,而SET类型的列可从定义的列值中选择多个字符的联合。

如果插入SET字段中列值有重复,则MySQL自动删除重复的值;插入SET字段的值的顺序并不重要,MySQL会在存入数据库时按照定义的顺序显示;如果插入了不正确的值,默认情况下,MySQL将忽视这些值,并给出警告。

对于SET来说,如果插入的值为重复的,则只取一个,例如插入“a,b,a”,则结果为“a,b”;如果插入了不按顺序排列的值,则自动按顺序插入,例如插入“c,a,d”,结果为“a,c,d”;如果插入了不正确的值,那么该值将被阻止插入,例如插入值“a,x,b,y”。

2.二进制字符串类型

。MySQL中的二进制数据类型有BIT、BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。下表列出了MySQL中的二进制数据类型:

Snipaste_2022-09-04_16-10-13.png

2.1BIT类型

BIT类型是位字段类型。M表示每个值的位数,范围为1~64。如果M被省略,默认为1。如果为BIT(M)列分配的值的长度小于M位,就在值的左边用0填充。例如,为BIT(6)列分配一个值b'101',其效果与分配b'000101'相同。BIT数据类型用来保存位字段值。例如,以二进制的形式保存数据13(13的二进制形式为1101),在这里需要位数至少为4位的BIT类型,即可以定义列类型为BIT(4),大于二进制1111的数据是不能插入BIT(4)类型的字段中的。

提示:

默认情况下,MySQL不可以插入超出该列允许范围的值,因而插入的数据要确保插入的值在指定的范围内。

2.2BINARY和VARBINARY类型

BINARY和VARBINARY类型类似于CHAR和VARCHAR,不同的是它们包含二进制字节字符串。其使用的语法格式如下:

列名称 BINARY(M)或者VARBINARY(M)

BINARY类型的长度是固定的,指定长度之后,不足最大长度的,将在它们右边填充‘\0’补齐以达到指定长度。例如:指定列数据类型为BINARY(3),当插入‘a’时,存储的内容实际为“a\0\0”,当插入“ab”时,实际存储的内容为“ab\0”,不管存储的内容是否达到指定的长度,其存储空间均为指定的值M。VARBINARY类型的长度是可变的,指定好长度之后,其长度可以在0到最大值之间。例如:指定列数据类型为VARBINARY(20),如果插入的值的长度只有10,则实际存储空间为10加1,即实际占用的空间为字符串的实际长度加1。

2.3BLOB类型

BLOB是一个二进制大对象,用来存储可变数量的数据。BLOB类型分为4种:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB,它们可容纳值的最大长度不同,如表:

Snipaste_2022-09-04_16-18-04.png

BLOB列存储的是二进制字符串(字节字符串),TEXT列存储的是非二进制字符串(字符字符串)。BLOB列没有字符集,并且排序和比较基于列值字节的数值;TEXT列有一个字符集,并且根据字符集对值进行排序和比较。

总结

  • 文本字符串类型包含4大类数据类型,二进制字符串类型包含3大类数据类型,每一种都有不同的特点,需根据特点合理选择数据类型。

好了,今天阿文就介绍到这了,有点困了...

02A7E7C9.jpg