持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第29天,点击查看活动详情
前言
上篇我们学习了MySQL中的数据类型中的文本字符串类型。有兴趣的小伙伴可以阅读(# MySQL学习-数据类型-文本字符串类型)。
下面学习MySQL中的数据类型中的ENUM,SET以及二进制类型。
ENUM类型
ENUM类型也叫作枚举类型,ENUM类型的取值范围需要在定义字段时进行指定。设置字段值时,只允许从成员中选取单个值,不能一次选取多个值。其所需要的存储空间由定义ENUM类型时指定的成员个数决定。
| 类型 | 长度 | 长度范围 | 占用的存储空间 |
|---|---|---|---|
| ENUM | L | 1<=L<=65535 | 1或2个字节 |
- 当ENUM类型包含1~255个成员时,需要1个字节的存储空间。
- 当ENUM类型包含256~65536个成员时,需要2个字节的存储空间。
- ENUM类型的成员个数上限为65535个。
示例一
创建一个表,包含ENUM类型。
CREATE TABLE test_enum(
season ENUM('春', '夏', '秋', '冬', 'unknow')
);
插入数据。
INSERT INTO test_enum
VALUES('春');
运行是可以正确插入数据的。
示例二
INSERT INTO test_enum
VALUES('UNKNOW');
运行发现,也可以插入数据。这里是忽略大小写的。
示例三
INSERT INTO test_enum
VALUES(1), ('3');
运行发现这样也可以插入数据,并且1对应的是'春','3'对应的是'秋'。即也可以使用索引进行枚举元素的调用。
示例四
INSERT INTO test_enum
VALUES(NULL);
运行发现可以插入NULL数据,是因为我们创建表的时候没有进行非空的限制,所以这里可以添加NULL值。
示例五
INSERT INTO test_enum
VALUES('季节');
运行发现报错,这里不能插入枚举以外的值。
SET类型
SET表示一个字符串对象,可以包含0个或多个成员,但成员个数的上限为64。设置字段值时,可以取取值范围内的0个或多个值。当SET类型包含的成员个数不同时,其所占用的存储空间也是不同的。
| 成员个数范围 | 占用的存储空间 |
|---|---|
| 1<=L<=8 | 1个字节 |
| 9<=L<=16 | 2个字节 |
| 17<=L<=24 | 3个字节 |
| 25<=L<=32 | 4个字节 |
| 33<=L<=64 | 8个字节 |
SET类型在存储数据时成员个数越多,其占用的存储空间越大。注意:SET类型在选取成员时,可以一次选择多个成员,这一点与ENUM类型不同。
示例六
创建表,包含SET类型。
CREATE TABLE test_set(
s SET('A', 'B', 'C')
);
插入数据。
INSERT INTO test_set
VALUES('A'), ('A,B')
运行发现,SET类可以插入多个数据。
示例七
INSERT INTO test_set
VALUES('A,B,C,A')
运行没有报错,这里插入重复的SET类型成员时,MySQL会自动删除重复的成员。
示例八
INSERT INTO test_set
VALUES('A,B,C,D')
这里运行报错,插入SET成员中不存在的值时,MySQL会报错。
二进制字符串类型
MySQL中的二进制字符串类型主要存储一些二进制数据,比如可以存储图片,音频和视频等二进制数据。MySQL中支持的二进制字符串类型主要包括BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB类型。
BINARY、VARBINARY类型
BINARY、VARBINARY类型类似于CHAR、VARCHAR。只是他们存储的是二进制字符串。
BINARY(M)为固定长度的二进制字符串,M表示最多能存储的字节数,取值范围为0~255个字符。如果字段不足(M)个字节,将在右边填充'\0'以补齐指定长度。
VARBINARY(M)为可变长度的二进制字符串,M表示最多能存储的字节数,总字节数不能超过行的字节长度限制65535,另外还要考虑额外字节开销,VARBINARY类型的数据除了存储数据本身外,还需要1或2个字节来存储数据的字节数。VARBINARY类型必须指定M,否则报错。
| 类型 | 特点 | 值的长度 | 占用空间 |
|---|---|---|---|
| BINARY(M) | 固定长度 | M(0<=M<=255) | M个字节 |
| VARBINARY(M) | 可变长度 | M(0<=M<=65535) | M+1个字节 |
BLOB类型
BLOB是一个二进制的大对象,可以容纳可变数量的数据。
BLOB类型可以存储一个二进制的大对象,比如图片、音频和视频等。但在实际工作中,往往不会再MySQL中使用BLOB类型存储大对象数据,通常会将图片、音频和视频文件存储到服务器的磁盘上,并将图片、音频和视频的访问路径存储到MySQL中。
| 类型 | 值的长度 | 长度范围 | 占用空间 |
|---|---|---|---|
| TINYBLOB | L | 0<=L<=255 | L+1个字节 |
| BLOB | L | 0<=L<=65535(相当于64kb) | L+2个字节 |
| MEDIUMBLOB | L | 0<=L<=16777215(相当于16MB) | L+3个字节 |
| LONGBLOB | L | 0<=L<=4294967295(相当于4GB) | L+4个字节 |
今天先学习到这里,明天继续。