[数据库]基本数据类型

本文介绍了MySQL中的数据类型,包括数值类型如tinyint、bit、float和decimal,以及字符类型char和varchar,还有日期和时间类型如date、datetime和timestamp。此外,还讨论了enum和set这两种特殊类型及其用途。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

●🧑个人主页:你帅你先说.
●📃欢迎点赞👍关注💡收藏💖
●📖既选择了远方,便只顾风雨兼程。
●🤟欢迎大家有问题随时私信我!
●🧐版权:本文由[你帅你先说.]原创,CSDN首发,侵权必究。

数据类型分类

在这里插入图片描述

数值类型

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表示每个值的位数,范围从164。如果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)函数
在这里插入图片描述
喜欢这篇文章的可以给个一键三连点赞👍关注💡收藏💖

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

你帅你先说.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值