MySQL中的数据类型(tinyint、bit、float、double和decimal的比较、datetime、date、timestamp、set、enum、find_in_set)

1. 数据类型的分类

1.1 数值类型

整形类型
tinyint[unsigned]有符号的范围是-128~127 无符号的范围是0~255 默认为有符号值
smallint[unsigned]有符号的范围是 -2^15 ~ 2^15-1 无符号的范围是0~2^16-1
int [unsigned]有符号的范围是-2^31~ 2^32-1 无符号的范围是0~2^32-1
bigint[unsigned]有符号的范围是-2^63~ 2^63-1 无符号的范围是0~2^64-1
小数类型
float[(m,d)][unsigned]m指定显示长度、d指定小数位数,占用4字节
double[(m,d)][unsigned]精度比float大,占用8个字节
decimal(m,d) [unsigned]定点数m指定长度 d表示小数点的位数

1.1.1 tinyint类型

在这里插入图片描述

1.1.2 bit类型

基本语法:bit[(M)] :位字段类型、M表示每个值的位数、范围从1到64、如果M被忽略 默认为1
注意:
bit 字段在显示时、是按照ASCII码对应的值显示
如果我们只存在0和1 这时可以不用确定每个值的位数
在这里插入图片描述

1.2.3 小数类型

1.2.3.1 float类型
float[(m,d)] [unsigned]   m指定显示长度、d指定小数位数、占用空间4个字节
float(4,2)表示的范围是-99.99~99.99 MySQL在保存值时会四舍五入
float(4,2) unsigned 表示的范围是0~99.99

在这里插入图片描述
在这里插入图片描述

1.2.3.2 decimal类型
decimal(m,d) [unsigned]:定点数m指定长度、d表示小数点的位数
decimal(5,2)表示的范围是:-999.99~999.99
decimal(5,2) unsigned 表示的范围是0~999.99

在这里插入图片描述

由图我们发现decimal的精度更加准确、所以如果希望小数的精度高建议使用decimal

1.2.3.3 float、double、decimal比较

在这里插入图片描述
float表示的精度大约是七位左右、decimal整数最大位m为65,支持小数的最大位数是d为30 如果d被省略、默认为0 如果m被省略、默认为10
如果希望小数的精度更高,推荐使用decimal

1.2 字符串类型

1.2.1 char

语法:char(L) 固定长度字符串、L是可以存储的长度,单位为字符 最大长度可以是255
在这里插入图片描述
char(2)表示可以存放两个字符,可以是字母或者汉字但是不能超过两个

1.2.1 varchar

语法:varchar(L) 可变长度字符串、L表示字符长度,最大长度为65535个字节
在这里插入图片描述
关于varchar(L)中,这个L值和编码密切相关

  • varchar的长度可以指定为65535字节之间,但是有1 ~ 3个字节用于记录数据大小,所以说varchar的有效值是65532
  • 当表编码是utf8时,varchar(n)的参数n的最大值是65532/3=21844【因为在utf中、一个字符占三个字节】
  • 当我表编码是gbk时,varchar(n)的参数n的最大值是65532/2=32766【因为在gbk中 一个字符占两个字节】

1.2.3 char和varchar

实际存储char(4)varchar(4)char占用字节varchar占用字节
abcdabcdabcd4*3=124*3+1 = 13
AAA4*3=121*3+1=4
Abcde存不下存不下数据超过长度数据超过长度
  • 如果数据长度都一样 建议使用定长char 比如:身份证号、手机号
  • 如果长度有变化,就使用变长
  • 定长的磁盘空间比较浪费 但是效率高
  • 变长的磁盘比较节省、但是效率低

1.3 时间和日期类

1.3.1 datetime、date、timestamp

datetime 时间日期  格式‘yyyy-mm-dd hh:ii:ss’表示范围是1000到9999 占用8个字节
date:日期 ‘yyyy-mm-dd ’ 占用三个字节
timestamp:时间戳 从1970年的开始的 和datetime完全一致  占用4个字节

在这里插入图片描述
更新数据: update 表名 set 属性=新值;
在这里插入图片描述

1.4 String类

1.4.1 enum和set

enum:枚举,‘单选’类型

该设定只是提供若干个选项的值,最终一个单元格中,实际只存储其中一个值。

  set:集合,‘多选类型’

该设定只是提供若干个选项的值,最终一个单元格中,可存储其中任意多个值;
举例;案例:有一个调查表votes,需要调查人的喜好, 比如(登山,游泳,篮球,武术)中去选择(可以多选),(男,女)[单选]

 create table votes(
    username varchar(30),
    hobby set('登山','游泳','篮球','武术'),
    gender enum('男','女'));

插入一系列数据:
在这里插入图片描述
查询:
在这里插入图片描述

可见不能查出所有爱好为登山的人
集合查询使用find_in_set函数:

1.4.2 find_in_set

find_in_set(sub,str_list);如果sub在str_list中,则返回下标,如果不在,返回0;str_list是用逗号分隔的字符串
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值