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

在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和1ASCII码对应的字符不可显示;这里我们插入
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



