MySQL支持多种数据类型,主要的数据类型如下
- 数值数据类型:整型、浮点型、定点小数类型
- 日期/时间类型
- 字符串类型:文件字符串、二进制字符串
一、整型
1.各个整型的信息如下
说明 | 存储需求 | |
tinyint | 很小的整数 | 1字节 |
smallint | 小的整数 | 2字节 |
mediumint | 中等大小的整数 | 3字节 |
int(integer) | 普通大小的整数 | 4字节 |
bigint | 大整数 | 8字节 |
有符号范围 | 无符号范围 | |
tinyint | -128--127 | 0--255 |
smallint | 32768--32767 | 0--65535 |
mediumint | -8388608--8388607 | 0--16777215 |
int(integer) | -2177483648--2147483647 | 0--4294967295 |
bigint | -9223372036854775808--9223372036854775807 | 0--18446744073709551615 |
2.整型的宽度
- 每个整型都有各自默认的宽度,宽度指数据显示几位
- 数据宽度与取值范围和占用空间无关
二、浮点数
1.分类
- ①单精度浮点类型:float
- ②双精度浮点类型:double
- ③定点小数类型:decimal(m,n)
说明 | 存储需求 | |
float | 单精度浮点数 | 4字节 |
double | 双精度浮点数 | 8字节 |
decimal(m,n) dec(m,n) |
压缩的“严格”定点数 | m+2个字节 |
说明
- decimal(m,n)。m代表精度:表示总共的位数(不包括小数点)。n代表标度:小数的位数
- float和double使用时也可以指定精度和标度
- 定点小数类型实际是以字符串形式存储的,在精度要求比较高的时候使用
2.注意事项
- 插入数据时,如果值越界了,会报错
- 插入数据时,如果值没有越界,但是小数越界了,多余出来的小数会丢失
三、文本字符串类型
1.分类
说明 | 存储需求 | |
char(m) | 固定长度非二进制字符串 | m字节,1<=m<=255 |
varchar(m) | 变长非二进制字符串 | L+1字节,L<=m和1<=m<=255 |
tinytext | 非常小的非二进制字符串 | L+1字节,L<(255) |
text | 小的非二进制字符串 | L+2字节,L<(65535) |
mediumtext | 中等大小的非二进制字符串 | L+3字节,L<(16777215) |
longtext | 大的非二进制字符串 | L+4字节,L<(4GB) |
enum | 枚举类型,只能有一个枚举字符串值 | 1或2个字节,取决于枚举值的数目(最大值65535) |
set | 一个设置,字符串对象可以有0个或者多个set成员 | 1,2,3,4或8个字节,取决于集合成员的数量(最多64个成员) |
- varchar和text类型是变长类型。其存储长度取决于列值的实际长度(即L),而不是取决于类型的最大可能尺寸
2.char和varchar类型
- char是固定长度字符串。例如:name char(10),如果name为'abc',name仍占用10字节
- varchar是变长字符串。例如:name varchar(10),如果name为'abc',name只占用4字节(3字节字符和一个字符串结束符)
注意事项
- char没有字符串结束符,varchar有字符串结束符
- 插入数据时,字符串的长度都不能超出char和varchar的最大长度。
- 如果varchar插入的字符串与最大长度相同,则结束符丢弃
- 如果插入字符结尾有单/多个空格,char会舍弃空格,varchar会保留空格
3.text类型
- text类型常用于保存文章内容、评论等字符多时使用
tinytext | 非常小的非二进制字符串 | L+1字节,L<(255) |
text | 小的非二进制字符串 | L+2字节,L<(65535) |
mediumtext | 中等大小的非二进制字符串 | L+3字节,L<(16777215) |
longtext | 大的非二进制字符串 | L+4字节,L<(4GB) |
4.enum类型
- enum总有一个默认值。如果enum列声明为NULL,默认值为NULL,如果enum列声明为NOT NULL,其默认值为允许的值列表的第1个元素
- 枚举最多有65535个元素
- 创建
create table student(enm enum('first','second','third'));
- 插入数据
insert into student values('first'),('second'),('third'),(NULL);
- 查询
select enm,enm+0 from student;
5.ste类型
四、二进制字符串类型
1.分类
说明 | 存储需求 | |
bit(m) | 位字段类型 | 大约(m+7)/8个字节 |
binary(m) | 固定长度二进制字符串 | m个字节 |
varbinary(m) | 可变长度二进制字符串 | m+1个字节 |
tinyblob(m) | 非常小的blob | L+1字节,L< |
blob(m) | 小的blob | L+2字节,L< |
mediumblob(m) | 中等大小的blob | L+3字节,L< |
longblob(m) | 非常大的blob | L+4字节,L< |
2.bit类型
- bit(m)。m为值的位数(bit位),范围为1~64。如果m省略,则默认为1位
- 普通查看不能查看bit类型定义的字段,需要使用函数转换(bin()
创建表:create table stduent(b bit(4));
插入数据:insert into student values(2),(9),(15);
查看数据:select bin(b) from student;
3.binary和varbinary类型
4.blob类型
五、year类型
1.特点
- year类型是一个单字节类型用于表示年,在存储时只需要1字节
2.使用
- 以4位字符串或者4位数字格式:范围'1901'~'2155'。字符串与数字格式都是一样的,例如插入式输入'2019'或者2019,插入到数据库值均为2019
- 以2位字符串格式:范围为'00'~'99',超过取值范围自动转换为2000年。其中,'00'~'69'表示2000~2069年,'70'~'99'表示1970~1999年。'0'与'00'作用相同
- 以2位数字格式:范围为1~99,这里的0将被转换为0000。1~69代表2001~2069,70~99代表1970~1999