MySQL常用数据类型详解

1. 数据类型分类

在这里插入图片描述

2. 数值类型

2.1 BIT类型

BIT [(M)]:位类型,M表示指定位数(1-64),如果M被忽略(默认值)是1
在这里插入图片描述
查看tt1里面的内容时发现a的内容10没有出现,这是为什么呢?

因为BIT字段在显示时是按照ASCLL码对应的值显示的!!!

数字10对应的ASCII码正好是个空格,所以什么都没有看见。
在这里插入图片描述
当我们接着往tt1表中插入(65, 65)时,因为A的ASCII值是65,所以a的值就是A了!

如果我们有这样的值,只存放0或1,这时可以定义bit(1),这样可以节省空间。
在这里插入图片描述
我们可以看到插入2时越界报错了。

2.2 TINYINT类型
在这里插入图片描述
数值越界测试:
在这里插入图片描述

往 tt3 里面插入128时出现错误:Out of range value for column ‘num’ at row 1(数值越

界),而插入127时则是成功的。

说明:在MySQL中,整型可以指定是有符号的和无符号的,默认是有符号的可以通过

UNSIGNED来说明某个字段是无符号的。

无符号案例:
在这里插入图片描述
往 tt4 里面插入256时出现错误:Out of range value for column ‘num’ at row 1(数值越

界),而插入128和255时则是成功的,这就体现了unsigned是无符号的,范围比有符号

的要大。

注意:尽量不使用UNSIGNED,对于INT类型可能存放不下的数据,INT UNSIGNED同

样可能存放不下,与其如此,还不如设计时,将INT类型提升为BIGINT类型!!!

其他类型大家可自行推导。

2.3 小数类型

2.3.1 FLOAT

FLOAT[(M, D)] [UNSIGNED]:M指定显示长度,D指定小数位数,占用空间4个字节
在这里插入图片描述
当我们的FLOAT(4,2)如果是一个有符号的,则表示范围是-99.99 ~ 99.99,如果小数位

数多于2位,则会四舍五入!

如果定义的是FLOAT(4,2) UNSIGNED这时,因为把它指定为无符号的数,范围是 0 ~

99.99。
在这里插入图片描述
DOUBLE类型可自行推导。

2.3.2 DECIMAL

DECLMAL(M, D) [UNSIGNED]:定点数M指定长度,D表示小数点的位数DECIMAL和

FLOAT很像,但是有区别:FLOAT和DECIMAL表示的精度不一样,FLOAT能表示的精

度大约是7位,DECIMAL(M, D)中的M最大为65,D最大为30,如果M忽略默认是10,

如果D忽略默认是0。

建议:如果希望小数的精度高,推荐使用DECIMAL!
在这里插入图片描述
3. 字符串类型

3.1 CHAR

CHAR(L):固定长度字符串,L是可以存储的长度,单位为字符,占用空间1个字节
在这里插入图片描述
说明:char(2) 表示可以存放两个字符,可以是字母或汉字,但是不能超过2个, 最多只

能是255
在这里插入图片描述
3.2 VARCHAR

VARCHAR(L):可变长度字符串,L表示字符个数,最大长度(4个字节)65535个字节
在这里插入图片描述
说明:关于VARCHAR(L),L表示的是字符数,这个数到底能有多大,这个L值,和表的

编码密切相关:

① VARCHAR长度可以指定为0到65535之间的值,但是有1 - 3 个字节用于记录数据大

小,所以说有效字节数是65532。

② 当表的编码是utf8时,VARCHAR(L)的参数L最大值是65532/3=21844,因为utf8中一

个字符占用3个字节;如果编码是gbk,VARCHAR(L)的参数n最大是65532/2=32766,

因为gbk中一个字符占用2字节。
在这里插入图片描述
3.3 CHAR和VARCHAR比较
在这里插入图片描述
如何选择定长或变长字符串?

① 如果数据确定长度都一样,就使用定长(CHAR),比如:身份证号,手机号,md5

② 如果数据长度有变化,就使用变长(VARCHAR), 比如:名字,地址,但是得能保证

最长的能存的进去

③ 定长的磁盘空间比较浪费,但是效率高;变长的磁盘空间比较节省,但是效率低

4. 日期和时间

常用的日期有如下三个:

① DATETIME:时间日期格式 ‘yyyy-mm-dd HH:ii:ss’ ,表示范围从1000到9999,占用

8个字节

② DATE:日期 ‘yyyy-mm-dd’,占用3个字节

③ TIMESTAMP:时间戳,从1970年开始的 ‘yyyy-mm-dd HH:ii:ss’,格式和DATETIME

完全一致,占用4个字节
在这里插入图片描述
添加时间时,时间戳自动补上当前时间!!!
在这里插入图片描述
更新时间时,时间戳会变成当前时间!!!

5. ENUM和SET

5.1 ENUM

ENUM:枚举,“单选”类型;

ENUM(‘选项1’, ‘选项2’, ‘选项3’, …);

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

且出于效率考虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如

下数字:1,2,3,…最多65535个;当我们添加枚举值时,也可以添加对应的数字编号

5.2 SET

SET:集合,“多选”类型;

SET(‘选项值1’, ‘选项值2’, ‘选项值3’, …);

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

而且出于效率考虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应

如下数字:1,2,4,8,16,32,… 最多64个

说明:不建议在添加枚举值和集合值的时候采用数字的方式,因为不利于阅读

案例:有一个调查表votes,需要调查人的喜好, 比如(登山,游泳,篮球,武术)中

去选择(可以多选),(男,女)(单选)
在这里插入图片描述
插入数据:
在这里插入图片描述
想查找所有喜欢游泳的人:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值