MySQL学习笔记(一)---数据类型

MySQL数据类型

目录

  • 数值类型
    • 整数
    • 浮点数
    • 定点数
    • 位值
    • 布尔值
  • 时间/日期类型
    • YEAR类型
    • TIME类型
    • DATE类型
    • DATETIME类型
    • TIMESTAMP类型
  • 字符串类型
    • CHAR类型和VACHAR类型
    • BINARY类型和VARBINCHAR类型
    • BLOB类型和TEXT类型
    • ENUM类型
    • SET类型

1.数值类型

1.1.整数

整数类型 字节数
TINYINT 1
SMALLINT 2
MEDIUMINT 3
INT 4
INTEGER 4
BIGINT 8

官方文档中的定义是这样的

  • INT[(M)] [UNSIGNED] [ZEROFILL]

我们就用这一个来举例:
其中(M)表示最大显示宽度,最大有效显示宽度的值是255,这个只用于数值显示时,对于宽度短于该列宽度的值左补全显示,并不是数字的最大的位数是M;
UNSIGNED:和C语言中的unsigned一样表示无符号数,这个不经常用到,只是在存储IP时用到int unsigned时用到,因为IP地址一般形如127.0.0.1;最大为255.255.255.255,用int存储时存不下但是int unsigned是刚刚好能存下的;

补充

MySQL中有把ip地址转换成int类型的函数;
INET_ATON(127.0.0.1)负责把ip地址转化为数字;
INET_NTOA()负责把数字转化为ip地址;
接下来演示一下:

在这里插入图片描述
接下来给大家讲解一条命令:
show create table ip\G;
这条命令可以看到建立数据表的细节;
在这里插入图片描述
这里我们可以看到这张数据表的所有细节:
ENGINE=InnoDB:所用的存储引擎是InnoDB;
CHARSET=latin1:表示所用的字符集是latin1常见的字符集还有gbk,utf8;后两个是中文字符集,utf8一个字符等于三个字节,gbk一个字符等于两个字节;
在这里插入图片描述
ZEROFILL:是在数字前填充0;具体的我们来演示一下;

在这里插入图片描述
但是这里a的长度还是1;

1.2.浮点数和定点数

我们直接来看官方文档对于浮点数和定点数的定义;

  • float[(M, D)] [UNSIGNED] [ZEROFILL]
  • double[(M, D)] ...
  • float(p) ...
  • decimal[(M, D)] ...

floatdouble中的MD表示精度标度;M是数据的总长度(小数点不算位数),D表示小数点后位数;这里需要注意当这两个值确定了以后,整数部分也就确定了,整数部分的位数不能大于这个值,但是小数部分可以大于D但是会被截取,采取四舍五入法;
float(p):p表示精度当0<=p<=24MySQL把他当做float,当24<p<=53时被当做double;
在这里插入图片描述
float(p)是很特殊的他只保留整数部分高位位,剩下的部分四舍五入;
在这里插入图片描述
高精度类型 DECIMAL;
这个类型用来保存,必须为确切精度的值,如财务,足球赔率等;
M最大为65,D最大为30;
这个就不做试验了,因为我觉得他和上面两个浮点数没有太大差别,主要就是MD的值大了;

1.3.位值

BIT(M)类型表示允许存储M位数值,M的范围是1~64;占用的空间是(M+7)/8;如果BIT(M)列分配的值小于M则会在高位补充0;
我们在插入时可以直接插入十进制也可以插入二进制;但是注意插入十进制时不要超过了M;
在这里插入图片描述
在这里插入图片描述
这里我们会发现使用select *from t;我们什么也看不到,这是因为采用了位模式我们不能直接查看;
所以要用select bin(a) from t;
在这里插入图片描述

1.4.布尔值

我们来看个东西神奇;
在这里插入图片描述
其实在MySQL中布尔值存在数据库里就是tinyint一个整数类型;
在这里插入图片描述


2.时间日期类型

2.1.YEAR

year类型占用一个字节,定义时可以是year(2)year(4);不过现在year(2)已经很少了,现在基本上就是year(4);
year(4)的取值范围是1901~2155以及0000;
值得注意的是,在插入2000这个年份时需要用到:
insert into t values('00');
insert into t values('0');;
例:
在这里插入图片描述
我们看到year类型默认为year(4);


2.2.TIME类型 DATETIME类型 DATE类型

因为datetime合起来就是datetime所以我们就直接说这个datetime;

datetime格式:YYYY-MM-DD HH:MM:SS占用8个字节;范围是:
1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
这里值得注意的是,两个数字中间的符号可以是任何符号,也可以没有符号,具体的看示例;
在这里插入图片描述
需要注意的一点是,如果在年份写了两个数字他就会自动补全到最近的年份;
在这里插入图片描述

2.3.TIMESTAMP类型

TIMESTAMP类型和DATETIME类型的显示是一样的,不同的是TIMESTAMP类型占四个字节,范围为1970-01-01 00:00:01 ~ 2038-01-19 03:14:07;
主要这个类型要说的是和时区的关系;
当你检索一个值的时候,他会把按当前时区显示,我们来做一个小实验,这里我们创建一个timestampdatetime作对比:
在这里插入图片描述
这里我们改一下我们的时区然后再改回来(我们改到伦敦):
在这里插入图片描述
我们从这个实验就能看到timestampdatetime的区别;
TIMESTAMP类型还有一个自动更新的属性:


3.字符串类型

3.1.CHAR类型和VARCHAR类型

char(M)这里的M最大为255表示字符数,而不是字节数,想utf8字符集一个字符等于三个字节,这里还是能放下255个字符占用255*3个字节;
varchar(L)这里和char一样L表示字符数,他实际存储的字节数是字符串L长度+一个记录字符串长度的字节如果L小于255记录长度的字节是1,大于255记录字节长度的字节是2;

CHAR(8) 存储需求 VARCHAR(8) 存储需求
‘ab’ ‘ab’ 8 ‘ab’ 3
‘abc’ ‘abc’ 8 ‘abc’ 4

从这个表格就能看出来两者的区别了;

3.2.BINARY和VARBINARY

binary(M)varbinary(M)这里与charvarchar最大的区别就是这里的M是字节数而不是字符数了;

目录后面几个先不写了,等后面遇到学了再写;

发布了35 篇原创文章 · 获赞 82 · 访问量 7530

猜你喜欢

转载自blog.csdn.net/qq_44049351/article/details/102558477