●🧑个人主页:你帅你先说.
●📃欢迎点赞👍关注💡收藏💖
●📖既选择了远方,便只顾风雨兼程。
●🤟欢迎大家有问题随时私信我!
●🧐版权:本文由[你帅你先说.]原创,CSDN首发,侵权必究。
📌📌📌为您导航📌📌📌
- 数据类型分类
- 数值类型
- tinyint类型
- bit类型
- float小数类型
- decimal小数类型
- char字符类型
- varchar字符类型
- 日期和时间类型
- enum和set
数据类型分类
数值类型
tinyint类型
tinyint为1个字节,数据范围是-128~127。
mysql> insert into tt1 values(1);
Query OK, 1 row affected (0.00 sec)
mysql> insert into tt1 values(128);
-- 越界插入,报错 ERROR 1264 (22003): Out of range value for column 'num' at row 1
bit类型
基本语法:
bit[(M)]:位字段类型。M表示每个值的位数,范围从1到64。如果M被忽略,默认为1。
//举个例子
mysql> create table tt1 (id int, a bit(8));
Query OK, 0 rows affected (0.01 sec)
mysql> insert into tt1 values(10,65);
Query OK, 1 row affected (0.00 sec)
mysql> select * from tt1;
+------+------+
| id | a |
+------+------+
| 10 | A |
+------+------+
1 row in set (0.00 sec)
💡:bit数据类型是以字符
的形式进行显示的。
float小数类型
基本语法:
float[(m, d)] [unsigned] : M指定显示长度,d指定小数位数,占用空间4个字节
//float(4,2)表示的范围是-99.99 ~ 99.99,MySQL在保存值时会进行四舍五入。
//例如插入99.995会报错,因为四舍五入就是100.00,但插入99.994不会报错,因为四舍五入还是99.99
//注意:当float是无符号时,float的范围缩小一半,只留下大于等于0的范围。
decimal小数类型
基本语法:
decimal(m, d) [unsigned]:定点数m指定长度,d表示小数点的位数
//decimal和float的用法非常类似
decimal(5,2)//表示的范围是 -999.99 ~ 999.99
decimal(5,2) unsigned//表示的范围 0 ~ 999.99
//与float不同的是,decimal的精度更高,所以需要高精度计算时,建议使用decimal
显然,decimal的精度更高,float的精度大约是7位
char字符类型
基本语法:
char(L):固定长度字符串,L是可以存储的长度,单位为字符,最大长度值可以为255。
//注意,L是字符长度,不是字节
//例如char(2),你可以插入"ab",也可以插入"中国"。
varchar字符类型
基本语法:
varchar(L):可变长度字符串,L表示字符长度,最大长度65535个字节。
//与char类似,这里的L也是字符长度
//从名字上可以看出char和varchar一定是有区别的
//举个例子,char和varchar的L都设置为8
//此时我们插入"abcd",此时char的L就是8,但varchar的L却是4,varchar也叫做可变字符,它的大小是动态变化的
//char可以理解成数组,一旦定义好大小就不能改变,varchar可以理解成string,8就是capacity,4就是len
我们还发现varchar并没有说最大长度是多少,而是直接给了最大字节数。
关于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字节。
日期和时间类型
常用的日期有如下三个:
- date :日期 ‘yyyy-mm-dd’ ,占用三字节。
- datetime 时间日期格式 ‘yyyy-mm-dd HH:ii:ss’ 表示范围从 1000 到 9999 ,占用八字节。
- timestamp :时间戳,从1970年开始的 yyyy-mm-dd HH:ii:ss 格式和 datetime 完全一致,占用四字节。
mysql> create table t4(d1 date, d2 datetime, d3 timestamp);
Query OK, 0 rows affected (0.04 sec)
insert into t4(d1,d2) values('2022-01-01','2022-07-01 12:01:01');
Query OK, 1 row affected (0.01 sec)
enum和set
基本语法:
enum:枚举,“单选”类型;
enum(‘选项1’,‘选项2’,‘选项3’,…);
该设定只是提供了若干个选项的值,最终一个单元格中,实际只存储了其中一个值;而且出于效率考虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,3,…最多65535个;当我们添加枚举值时,也可以添加对应的数字编号
。
set:集合,“多选”类型;
set(‘选项值1’,‘选项值2’,‘选项值3’, …);
该设定只是提供了若干个选项的值,最终一个单元格中,设计可存储了其中任意多个值;而且出于效率考虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,4,8,16,32,… 最多64个。
mysql> create table t4( gender enum('男','女'),hobby set('打游戏','下棋','游泳','打篮球'));
Query OK, 0 rows affected (0.04 sec)
mysql> insert into t4 values ('男','下棋');
Query OK, 1 row affected (0.00 sec)
//与enum不同的是,set可以一次插入多条。
mysql> insert into t4 values ('男','下棋,游泳,打游戏');
Query OK, 1 row affected (0.01 sec)
如果我要查询爱好有下棋的人要怎么查?
可能有人以为是这样
这样仅仅找出了只会下棋的,而我们要的是爱好里有下棋的人都要找出来。
此时我们可以使用find_in_set(sub,str_list)
函数
喜欢这篇文章的可以给个一键三连
点赞👍关注💡收藏💖