Linux_MySQL 数据类型

1.MySQL数据类型

数据库中类型决定了储存这个数据所占用的大小,以及如何识别这个数据。

①数值类型

数据类型说明
bit(M)位类型,M指定位数,默认值1,范围1 ~ 64
tinyint [unsigned]有符号范围-128 ~ 127,无符号0 ~ 255,默认无符号(char)
smallint [unsigned]有符号范围 -215 ~215 -1,无符号 216 -1(short)
int [unsigned]有符号范围 -231 ~231 -1,无符号 232 -1(int)
bigint [unsigned]有符号范围 -263 ~263 -1,无符号 264 -1(long long)
bool0和1表示假和真
float(M,D)[unsigned]M指定显示长度,D指定小数位数,占用四字节(float)
double(M,D)[unsigned]表示精度比float大,占用八个字节(double)
decimal(M,D)[unsigned]浮点数类型,M指定长度,D表示小数点的位数,精度比double更好一些

tinyint

在这里插入图片描述
当插入的数据大于数据类型的范围时会插入失败。
在这里插入图片描述

MySQL对数据的存储相比于C语言更加严格,MySQL数据类型本质就是一种约束。

bit(M)

在这里插入图片描述
如上图可知,当a的类型是比特时无法正常显示。这时因为此时a是按照二进制储存的。在解析时默认按照ascii表进行显示,10对应的ascii是不可见字符,所以打印无法正常显示。
在这里插入图片描述


小数类型测试

float(M,D)[unsigned]

float(M,D)[unsigned] M指定显示长度,D指定小数位数,占用四字节(float)、

eg:float(4,2)取值范围为:-99.99~99.99
如果输入99.498会被截断,遵循4舍5入原则,变为99.50。
99.994可以插入进去,99.995插入失败
在这里插入图片描述
如果float(4,2)设置成无符号,则取值范围为:0~99.99

decimal(M,D)[unsigned]

decimal(M,D)[unsigned] 浮点数类型,M指定长度,D表示小数点的位数,精度比double更好一些

eg:
decimal(5,2)范围是-999.99~999.99
如果设置无符号0~999.99

相比于float,decimal精确度更高一些。

对比float和decimal的精度
在这里插入图片描述
如上图可知,decimal和float储存相同的浮点数,对比decimal储存精确度更高。

decimal最大小数位是30位,宽度m最大65。float最大精度大约为7位。

②文本、二进制类型

数据类型说明
char(size)固定长度字符串类型,size最大255
varchar(len)可变长度字符串,len的大小与编码形式有关
blob二进制数据
text大文本,不支持全文索引,不支持默认值

char(size)

char(size) 固定长度字符串类型,size最大255

系统直接开辟size大小的空间存储字符串。如果你的长度小于size,剩余的空间就浪费了。

char(2)代表可以存两个字符,包括字母或者汉字。(这个字符需要与C语言区分开,这里一个汉字也是一个字符,数据库的一个字符大小不是一个字节)。
在这里插入图片描述

varchar(len)

varchar(len) 可变长度字符串。

在len个字符范围内,需要多少个字符空间,就开辟多少个,但是不能超过len个。

len的大小与编码方式有关:

  • varchar最大可以存放65535字节的字符串,其中1~3个字节用来记录数据大小。所以有效大小为65532
  • 如果是utf-8(一个字符占用三字节) len最大为65532÷3=21844
  • 如果是gbk(一个字符占用两个字节)len最大为65532÷2=32766

在这里插入图片描述
char与varchar对比
在这里插入图片描述
这里统一采用utf-8的编码格式形式进行说明,varchar需要1到3个字节保存字符串长度(计数)。

③时间日期类型

数据类型说明
date/datetime/timestamp时间类型

date:日期格式年-月-日 占用三个字节
datetime:日期格式 年-月-日 时:分:秒 占用八字节。
timestamp:时间戳,格式与datetime相同,占用四字节。当更新数据时,时间戳会更新成当前时间。

在这里插入图片描述

在这里插入图片描述
在更新数据时timestamp类型时间也会更新
在这里插入图片描述

④enum与set类型

数据类型说明
enum字符串对象,其值来自表创建时在列规定的显示枚举的一个列值,只能从多个取值中选一个
set字符串对象,可以有多个值,这些值来自创建表时所规定,可以从多个值中选多个值

枚举:多选一。集合:多选多

下面通过喜欢的水果表来举例子:

eg:
在这里插入图片描述
总结:

  1. enum取值只能是设定好的字段,并且只能选一个。
  2. set的取值也只能是设定好的字段,但可以选择多个。

其次插入方式还有:
在这里插入图片描述
插入过程中可以采用数字的形式,1和2就像数组下标一样,自动对应枚举类型。1对应男(枚举第一个元素),2对应女。


set也可以采用数字的形式插入。
在这里插入图片描述
在这里插入图片描述
如上图发现,这里3不是对应set的第三个元素,而是前两个元素
在这里插入图片描述
而插入4号时对应的时set的第三个元素

当使用数字的方式插入set类元素时,此时数字不能类比数组下标,而是比特位.这一点与文件权限类似

在这里插入图片描述

在这里插入图片描述


set数据库查询方式:

find_ in_ set查找set类型数据

通常查找数据库的方式:

在这里插入图片描述
但是因为set的数据个数不止一个,所以查询时需要使用find_ in_ set函数

find_in_set(sub,str_list) :如果 sub 在 str_list 中,则返回下标;如果不在,返回0; str_list 用逗号分隔的字符串。

eg:

在这里插入图片描述
所以查所有喜欢吃的水果是苹果(不包含其他水果,严格匹配):
在这里插入图片描述

查找爱吃的水果中有苹果的人(不严格匹配):
在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NUC_Dodamce

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值