您的位置:首页 > 房产 > 建筑 > 【MYSQL】数据类型

【MYSQL】数据类型

2024/12/23 16:09:26 来源:https://blog.csdn.net/yyqzjw/article/details/139969050  浏览:    关键词:【MYSQL】数据类型

数据类型分类
在这里插入图片描述
数值类型
在这里插入图片描述

tinyint类型

在这里插入图片描述
创建一个表,表中变量num的数据类型为tinyint
数据越界测试:
在这里插入图片描述
在数据类型范围内都可以插入,越界插入会报错
在这里插入图片描述

创建一个表,表内数据类型弄成无符号的:

在这里插入图片描述

在这里插入图片描述
无符号的tinyint的范围为0~255,如果插入-1或256会直接拦截。
我们向MYSQL数据类型中插入不合法的数据,MYSQL一般都直接会拦截,不让我们操作,而我们插入到表中的,一定是合法的数据。在c语言中如果是int转char就会发生截断,MYSQL这里不存在截断,对于MYSQL,数据类型也是一种约束.

bit类型

bit类型,位类型.
bit[M]:位字段类型。M表示位数,范围从1到64,如果M被忽略,默认为1.

在这里插入图片描述
online表示是否在线,0为不在线,1为在线,插入数据:
在这里插入图片描述
online插入0,1是成功的.
在这里插入图片描述
继续插入:
在这里插入图片描述
online插入2,3,4都失败了,因为bit定义时只有一位,一个bit位只能表示0,1,我们可以用其他进制显示online
在这里插入图片描述
修改bit位数:
在这里插入图片描述

在这里插入图片描述
从一位改为十位
最大表示的数就到2^10-1;即1023;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
online插入字符‘a’
在这里插入图片描述
字符a的ascll码为97,对应十六进制为61

bit只能表示正整数,如果插入负数会直接拦截:
在这里插入图片描述
测试bit位数范围为1~64,测试一下:
在这里插入图片描述
浮点数类型
float

float[(m, d)] [unsigned] : M指定显示长度,d指定小数位数,占用空间4个字节

例子:
在这里插入图片描述
在这里插入图片描述
4表示浮点数中有四位,2表示小数点后有两位,比如36.51,3,6,5,1四位,小数点后面有两位51。因为没有带unsigned,范围为-99.99~99.99
插入数据:
在这里插入图片描述
在这里插入图片描述
如果插入超出范围的:
在这里插入图片描述
当插入数据在范围内,但是小数位没有给够,会自动帮你补全:
在这里插入图片描述
如果插入的数据在范围内,小数位数给多了,会进行四舍五入
在这里插入图片描述

如果是99.994四舍五入后在范围内,如果是99.995,四舍五入后超出范围就不能插入。
创建无符号float:
在这里插入图片描述

插入数据:
在这里插入图片描述
unsigned float会将负数部分去除留下0和>0;
mysql中float是否会有精度损失?
修改一下float精度
在这里插入图片描述
插入数据:
在这里插入图片描述
在这里插入图片描述
可以保证最大精度为6位,我们可以用另外一种类型来避免精度损失,这个类型就是decimal.

decimal

decimal(m, d) [unsigned] : 定点数m指定长度,d表示小数点的位数

例子:
在这里插入图片描述
两个类型,一个float为10位,小数为8位,一个是decimal为4位,小数为2位。
插入数据:
在这里插入图片描述
可以看到,基本和float差不多。
修改decimal精度:
在这里插入图片描述
float和decimal插入相同的值:
在这里插入图片描述
在这里插入图片描述
明显decimal精度很高。

字符串类型

char
char(L): 固定长度字符串,L是可以存储的长度,单位为字符,最大长度值可以为255
例子:

name类型为char(2),也就是能存放两个字符.
插入数据:
在这里插入图片描述
‘abc’发现不行

显示一下:
在这里插入图片描述
再次插入些数据:
在这里插入图片描述
在这里插入图片描述

在utf8中,一个汉字占3个字节,而GBK中一个汉字占两个字节,而这里的中国占了六个字节还能插入,所以说char中单位为字符,而非字节.
边界测试:
在这里插入图片描述

varchar

varchar(L): 可变长度字符串,L表示字符长度,最大长度65535个字节
例子:
在这里插入图片描述
插入数据:
在这里插入图片描述
在这里插入图片描述
因为刚才最大字节是65535,所以我们可以长度修改为65535吗?
在这里插入图片描述
这里最大为16383,这是什么?
这里字符集用的是utf8mb4,
在这里插入图片描述
16383*4=65532,也就是最大插入字符数为16383,可以试试:
在这里插入图片描述
上面写着一行不能太大,一行就代表一次插入的记录,包括int,四个字节,
说明:
关于varchar(len),len到底是多大,这个len值,和表的编码密切相关:
varchar长度可以指定为0到65535之间的值,但是有1 - 3 个字节用于记录数据大小,所以说有效字
节数是65532。
当我们的表的编码是utf8时,varchar(n)的参数n最大值是65532/3=21844[因为utf中,一个字符占
用3个字节],如果编码是gbk,varchar(n)的参数n最大是65532/2=32766(因为gbk中,一个字符
占用2字节)。
因为有一次插入数据的别的类型干扰
重新建表:

在这里插入图片描述
这里一次插入只有name,没有其他变量,编码字符集也用utf8
在这里插入图片描述
在这里插入图片描述

char和varchar比较

在这里插入图片描述
如何选择定长或变长字符串?
如果数据确定长度都一样,就使用定长(char),比如:身份证,手机号,md5
如果数据长度有变化,就使用变长(varchar), 比如:名字,地址,但是你要保证最长的能存的进去。
定长的磁盘空间比较浪费,但是效率高。
变长的磁盘空间比较节省,但是效率低。
定长的意义是,直接开辟好对应的空间
变长的意义是,在不超过自定义范围的情况下,用多少,开辟多少。
解释这里abcd存储,为啥varchar要加1个字节,因为要保存abcd的总长度,所以用一个字节即可.

日期和日期类型

常用的日期有如下三个:
date :日期 ‘yyyy-mm-dd’ ,占用三字节
datetime 时间日期格式 ‘yyyy-mm-dd HH:ii:ss’ 表示范围从 1000 到 9999 ,占用八字节
timestamp :时间戳,从1970年开始的 yyyy-mm-dd HH:ii:ss 格式和 datetime 完全一致,占用
四字节
例子:
在这里插入图片描述
在这里插入图片描述

更新数据:

在这里插入图片描述

enum和set

语法:
enum:枚举,“单选”类型;
enum(‘选项1’,‘选项2’,‘选项3’,…);
该设定只是提供了若干个选项的值,最终一个单元格中,实际只存储了其中一个值;而且出于效率考
虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,3,…最多65535
个;当我们添加枚举值时,也可以添加对应的数字编号。
set:集合,“多选”类型;
set(‘选项值1’,‘选项值2’,‘选项值3’, …);
该设定只是提供了若干个选项的值,最终一个单元格中,设计可存储了其中任意多个值;而且出于效率
考虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,4,8,16,32,…
最多64个。
说明:不建议在添加枚举值,集合值的时候采用数字的方式,因为不利于阅读。
例子:
有一个调查表votes,需要调查人的喜好, 比如(登山,游泳,篮球,武术)中去选择(可以多选),(男,女)[单选]
在这里插入图片描述
插入数据:
在这里插入图片描述
在这里插入图片描述
按照性别查找女生:
在这里插入图片描述
查找所有下棋的人:
在这里插入图片描述
不能查出有一项为下棋的人,如果要查出有下棋的人:
使用集合查询find_in_set函数:
find_in_set(sub,str_list) :如果 sub 在 str_list 中,则返回下标;如果不在,返回0;
str_list 用逗号分隔的字符串。
在这里插入图片描述
在这里插入图片描述
查询爱好登山的人:
在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com