【MYSQL查漏补缺】mysql数据类型

大致可以分为三类:数值、日期/时间和字符串(字符)类型。
学习链接:https://www.bilibili.com/video/BV12b411K7Zu?p=118

一、数值类型

类型大小范围(有符号)范围(无符号)用途
TINYINT1 byte(-128,127)(0,255)小整数值
SMALLINT2 bytes(-32 768,32 767)(0,65 535)大整数值
MEDIUMINT3 bytes(-8 388 608,8 388 607)(0,16 777 215)大整数值
INT或INTEGER4 bytes(-2 147 483 648,2 147 483 647)(0,4 294 967 295)大整数值
BIGINT8 bytes(-9,223,372,036,854,775,808,9 223 372 036 854 775 807)(0,18 446 744 073 709 551 615)极大整数值
FLOAT4 bytes(-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38)0,(1.175 494 351 E-38,3.402 823 466 E+38)单精度 浮点数值
DOUBLE8 bytes(-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)双精度 浮点数值
DECIMAL对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2依赖于M和D的值依赖于M和D的值小数值

1.1什么是有符号和无符号

有符号,即有正、0、负数,无符号,就是没有负数。

1.2 如何设置有符号和无符号

CREATE TABLE test(
	t1 int,
	t2 int UNSIGNED
);
desc test;

在这里插入图片描述
1、int没有指定长度,默认长度是11位,默认是有符号数
2、指定无符号数需要使用关键字UNSIGNED
3、如果在无符号的字段,插入一个有符号数,数据插入不了

insert into test values(-200,-300);
commit;

在这里插入图片描述
4、创建表,指定int的长度,并不是这个字段实际的int长度,实际的int长度,由int数据类型的范围决定的,如果指定int长度,一般和填充(ZEROFILL)一起使用。

drop table if exists test02
CREATE TABLE test02(
	t3 int(5)
)
insert into test02 values(666666)
select * from test02;

上面的sql虽然超过长度5,但是能执行成功:
在这里插入图片描述
那么,这个int长度5的作用是什么呢?

drop table if exists test02
CREATE TABLE test02(
	t3 int(5) ZEROFILL
);
insert into test02 values(11);
select * from test02;

在这里插入图片描述
由上面的结果可见,长度不够时,填充了0

1.3 float、double、decimal

decimal是定点型。如果保存精度要求比较高,使用这个。

drop table if exists test02
CREATE TABLE test02(
	t1 float(5,2),
	t2 double(5,2),
	t3 decimal(5,2)
);
insert into test02 values(123.45,123.45,123.45);
select * from test02;

在这里插入图片描述
从上面的执行结果来看,没有什么区别。

注意(5,2) 5代表的是总长度,2代表的是小数点后的位数

如果小数位数过多,会四舍五入

drop table if exists test02
CREATE TABLE test02(
	t1 float(5,2),
	t2 double(5,2),
	t3 decimal(5,2)
);
insert into test02 values(123.45,123.45,123.45);
insert into test02 values(123.456,123.456,123.456);
insert into test02 values(123.4,123.4,123.4);
select * from test02;

在这里插入图片描述
如果再插入一下的数据,数据插不进去,因为整数的长度是3

insert into test02 values(1523.4,1523.4,1523.4);

长度都可以省略:

drop table if exists test02
CREATE TABLE test02(
	t1 float,
	t2 double,
	t3 decimal
);
desc test02;

在这里插入图片描述
由上面的结果可知,如果是decimal,默认是(10,0),如果是float和double,则会根据插入数值的精度来决定精度

二、字符串类型

类型大小用途
CHAR0-255 bytes定长字符串
VARCHAR0-65535 bytes变长字符串
TINYBLOB0-255 bytes不超过 255 个字符的二进制字符串
TINYTEXT0-255 bytes短文本字符串
BLOB0-65 535 bytes二进制形式的长文本数据
TEXT0-65 535 bytes长文本数据
MEDIUMBLOB0-16 777 215 bytes二进制形式的中等长度文本数据
MEDIUMTEXT0-16 777 215 bytes中等长度文本数据
LONGBLOB0-4 294 967 295 bytes二进制形式的极大文本数据
LONGTEXT0-4 294 967 295 bytes极大文本数据

2.1char和varchar

char:固定长度的字符,空间相对消耗大,效率相对高,长度可以省略,默认为1
varchar:可变长度的字符,空间相对消耗小,效率相对低,长度不可省略

2.2枚举(了解)

drop table if exists test02
CREATE TABLE test02(
	t1 ENUM('a','b','c')
);
insert into test02 values('a');

2.3集合(了解)

drop table if exists test02
CREATE TABLE test02(
	t1 SET('a','b','c')
);
insert into test02 values('a');
insert into test02 values('a,b');

三、日期与时间类型

类型大小 ( bytes)格式范围用途
DATE3YYYY-MM-DD1000-01-01/9999-12-31日期值
TIME3HH:MM:SS‘-838:59:59’/‘838:59:59’时间值或持续时间
YEAR1YYYY1901/2155年份值
DATETIME8YYYY-MM-DD HH:MM:SS1000-01-01 00:00:00/9999-12-31 23:59:59混合日期和时间值
TIMESTAMP4YYYYMMDD HHMMSS1970-01-01 00:00:00/2038结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07混合日期和时间值,时间戳

3.1timestamp和datetime

timestamp和时区有关

drop table if exists test02
CREATE TABLE test02(
	t1 TIMESTAMP,
	t2 DATETIME
);
insert into test02 values(NOW(),NOW());

在这里插入图片描述
上面的结果看不出两者都何区别

修改时区,改成了东九区:

SHOW VARIABLES LIKE "time_zone"
SET time_zone ='+09:00'

修改时区之后,再执行上面的SQL,结果:
在这里插入图片描述
可见,两者时间相差一个小时。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值