前言
了解了数据库和数据表的相关操作,现在来学习数据库中能够存储的数据类型
数据类型分类

在MYSQL
数据库中,常见的类型如上图所示,现在来依次了解这些数据类型。
数值类型
1. 整数类型
常见的整数类型:

这些整数类型字节大小不同,能存储的数据范围就有所不同。
例如:TINYINT
,1
字节,数据范围:[-128, 127]
;无符号TINYINT
类型数据范围:[0 , 255]
。
这里以TINYINT
为例,做一下数据的插入,其他的整数类型类似。

要创建无符号tinyint
类型的字段,在创建数据表时在字段后面带上unsigned
即可。

2. bit类型
上述的整数类似,大小都以字节为单位;而位字段类型 是以bit
位为单位的。
在创建数据表时,也可以以bit
为单位,创建字段。
a bit(M)
在创建数据表时,可以通过M
指明所占用的bit
位数;M
取值范围:[1 , 64]
;(如果忽略M
,默认就是1
)

可以看到,1
个bit
位的数据范围是[0 , 1]
,依次类推,2
个bit
位的数据范围就是[0, 3]
。
在上述插入数据的操作中,在使用
select
查看数据时,查看不到bit
字段的0
和1
。**bit字段在显示时,是按照ASCII码对应的值显示 **
我们查看不到
bit
字段的0
和1
,是因为0
和1
ASCII码对应的字符不可显示;这里我们插入
97
-a
这些数值,我们就能够使用select
查看到插入的数据了。
2. 浮点数类型
在mysql
数据库当中,除了可能已存储整数、bit
位字节类型数据,还可以存在浮点数类型。
常见的浮点数类型:float
、double
、decimal
。
float
类型
定义
float
类型的格式:float(m,d)
(也可以指定定义float
)
m
表示指定显示长度,d
表示小数位数。例如:
float(4,2)
,显示长度4
,小数位数2
,数据范围就是-99.99 ~ 99.99
注意:如果设置成无符号(float(4,2) unsigned
),数据范围就是 :0 ~ 99.99

decimal
类型
decimal
类型使用和float
的使用一样,都是可以指明显示长度和小数位数。
decimal(5,2)
类型数据范围:-999.99 ~ 999.99
。
decimal(5,2) unsigned
数据范围:0 ~ 999.99
。
decimal
和float
的区别:
精度不同
decimal
想比于float
,精度更高。如果需要小数的精度更高,就可以使用
decimal
sql
FLOAT(M,D) -- M=总位数,D=小数位;MySQL 8.0.17 起被废弃,仅保留 FLOAT
DOUBLE(M,D) -- 同上,8.0.17 起也废弃
DECIMAL(M,D) -- 默认 (10,0);M≤65,D≤30,且 D≤M
文本类型
1. char
char
类型是固定长度字符串,在使用时需要指明长度。
sql
char(L) -- L表示存储的长度,单位是字符,最大长度为255
注意,这里单位是字符,一个中文汉字也是一个字符。

2. varchar
varchar
是可变长度字符串,在使用时需要指明字符串最大长度;
sql
varchar(L) -- L表示字符串最大长度

varchar(len)
,len
的最大值
varchar
可以支持0 ~ 65535
字节长度,其中有1-3
字节用来记录数据大小;有效字符长度字节数是65532
。
- 如果表的编码是
utf8
,一个字符占3
个字节,varchar(len)
中len
的最大值:65532/3 = 21884
- 如果表的编码是
gbk
,一个字符占2
个字节,varchar(len)
中len
的最大值:65532/2 = 32766
这里表编码集是utf8
,len
最大值就是21845
,指明长度超过21645
就会报错。(让我们使用TEXT
文本类型)
char
和varchar
的区别:
char
是定长字符串,varchar
可变长字符串,varchar
的变长体现在哪里呢?
在定义时,
varchar
指明的是字符串的最大长度,而char
指明的是字符串的长度。
char
在实际存储时,无论字符串长度为多少,存储的都是固定的长度。- 而
varchar
在实际存储时,会根据实际字符串的长度,动态存储。
- 定长:直接开辟好对应的空间;磁盘空间比较浪费,但是效率高。
- 变长:在不超过自定义范围的情况下,用多少空间,就开辟多少空间。磁盘空间相对节省,但效率低。
如果存储数据长度固定,就使用定长char
如果存储数据长度有变化,就使用变长varchar
时间和日期
在mysql
中,除了存储数值和文本类型,还可以存储时间。
常见的时间类型:
date
: 日期;格式yyy-mm-dd
,3
字节大小。datetime
: 日期时间;格式yyy-mm-dd HH:ii:ss
,4
字节大小。timestamp
:时间戳;1970
年开始格式与datetime
完全一致,4
字节大小
对于日期date
、日期时间datetime
还是非常容易理解的;这里主要看一下时间戳:
时间戳
timestamp
,它会自动更新,不需要我们显示插入。简单来说就是:在插入数据时,时间戳这一列会自动插入(获取当前时间);在数据更新时,时间戳也会自动更新。

枚举类型
枚举类型,简单来说就是:提供若干个选项的值,在插入时在这些选项中选择一个或者若干个值插入。
1. enum
语法:
sql
enum('选项1','选项2','选项3',...)
enum
是提供若干个选项的值,但在最终的一个单元格中,实际存储了其中一个值。(在插入数据时选择其中一个插入)。
这些值实际存储的都是数字,因为每一个选项都一次对应一个数字:1,2,3,...
。(在插入时,也可以选择数字插入)
例如:在信息表中,要记录性别,就可以使用
enum
枚举

2. set
enum
是枚举多个选项,选择其中一个插入,而set
则是提供多个选项值,选择其他若干个进行插入。
sql
set('选项1','选项2','选项3',...)
在插入时和
enum
类似,可以使用若干个选项值进行插入,也可以使用数字进行插入。(存储的都是数字)但是
set
的这个数字和enum
有所不同:
enum
中的数字类似于下标,从1
开始 (因为enum
只选择一个选项值进行插入)set
中使用的数字可以当中位图,使用二进制中一个bit
位表示是否插入该选项(因为set
可以选择若干个选项值进行插入)位图:
0
对应二进制:0000 0000
,插入空数据;3
对应二进制:0000 0011
,插入选项1,选项2。
例如,在表中要存储爱好,每个人爱好都可能存在多个,此时就可以使用set
。
本篇文章到这里就结束了,感谢支持
我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=2oul0hvapjsws