MySQL从入门到精通之数据类型

本文深入解析MySQL中的数据类型,包括整形、小数、字符和日期型。详细介绍了每种类型的特性、使用场景及如何处理超出范围的情况。

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

如果你有一些编程基础,比如C语言、C++、Java等强类型语言,对这个概念肯定不陌生。如果没有学过,可以从数学中的整数、实数等概念进行迁移到整数型(整形int)、浮点型(float单精度,double双精度)。

一、整形

在mysql中,整形一共有五种,对应名称、大小如下表

整型字节数signed有符号unsigned无符号
tinyint1-128~1270~255
smallint2-32768~327670~65535
mediumint3-8388608~83886070~16777215
int/integer4-2147483648~21474836470~4294967295
bigint8-9223372036954775808~92233720368547758070~18446744073709551615

特征:

①、默认是有符号整形(可插入负数),除非添加unsigned关键词进行限定
②、如果插入的数据超过了当前类型范围,则会默认插入临界值,并且抛出out of rang异常
1、设置无符号和有符号
DROP TABLE IF EXISTS tab_int;
CREATE TABLE tab_int(
	#默认有符号整形
	num1 INT(7),
	#无符号整形
	num2 INT(7) UNSIGNED
);

DESC tab_int;

在这里插入图片描述

2、out of range异常
#向tab_int表插入三条记录
INSERT INTO tab_int VALUES(-1234, 1234);
#num2是unsigned整形,所以-1234超过了下界零,故只能填充下界0
INSERT INTO tab_int VALUES(1234,-1234);
#num1、num2都是int型4个字节,超过表示范围num1填充下界,num2填充上界
INSERT INTO tab_int VALUES(-214748364894967296, 214748364894967296);

在这里插入图片描述
在这里插入图片描述

二、小数

分类:
1.浮点型
float(M,D)、double(M,D)
2.定点型
dec(M,D)、decimal(M,D)
其中M代表整数部位+小数部位的最大长度,D代表小数部位的长度
特征:
①、如果超过范围,则插入临界值
②、M和D都可以省略
	如果是decimal,则M默认为10,D默认为0(也就是默认只存储整数部分)
	如果是float和double,则会根据插入的数值的精度来决定精度
M、D部位长度的控制
DROP TABLE tab_float;
CREATE TABLE tab_float(
	f1 FLOAT,
	#设置整数+小数部位最大长度为5,小数部位最大长度为2
	f2 FLOAT(5, 2),
	d1 DOUBLE,
	#设置整数+小数部位最大长度为5,小数部位最大长度为3
	d2 DOUBLE(5, 3),
	de1 DECIMAL,
	#设置整数+小数部位最大长度为10,小数部位最大长度为3
	de2 DECIMAL(10,3)
);

DESC tab_float;

在这里插入图片描述

#插入测试数据
INSERT INTO tab_float VALUES(123.4523, 123.4523, 123.4523, 123.4523, 123.4523, 123.4523);
INSERT INTO tab_float VALUES(123.456,123.456,123.456, 123.456,123.456,123.456);
INSERT INTO tab_float VALUES(123.4,123.4,123.4,123.4,123.4,123.4);
INSERT INTO tab_float VALUES(1523.4,1523.4,1523.4,1523.4,1523.4,1523.4);

SELECT * FROM tab_float;

在这里插入图片描述
可以看出设置了D,小数位数就是固定,默认会填充零。超过了边界就会使用边界值代替。

三、字符型

较短的文本:
char
varchar
其他:

binary和varbinary用于保存较短的二进制
enum用于保存枚举
set用于保存集合


较长的文本:
text
blob(较大的二进制,比如图片)

特点:
		写法		M的意思								特点				空间的耗费	效率
char	char(M)		最大的字符数,可以省略,默认为1		固定长度的字符		比较耗费		高

varchar varchar(M)	最大的字符数,不可以省略				可变长度的字符		比较节省		低
1、枚举型
CREATE TABLE tab_enum(
	c1 ENUM('a','b','c')
);

INSERT INTO tab_enum VALUES('a');
INSERT INTO tab_enum VALUES('b');
INSERT INTO tab_enum VALUES('c');
#不再枚举范围中,所以将为空
INSERT INTO tab_enum VALUES('m');
#mysql不区分大小写,所以将插入'a'
INSERT INTO tab_enum VALUES('A');

SELECT * FROM tab_enum;

在这里插入图片描述

2、set
DROP TABLE IF EXISTS tab_set;
CREATE TABLE tab_set(
	s1 SET('a','c','d','b')
);
INSERT INTO tab_set VALUES('a');
#mysql不区分大小写
INSERT INTO tab_set VALUES('A,B');
#set将自动排序
INSERT INTO tab_set VALUES('a,d,c');
#set将自动去重,并且不再设置范围内的元素无法插入
INSERT INTO tab_set VALUES('a,d,c,e,a');

SELECT * FROM tab_set;

在这里插入图片描述

四、日期型

分类:
date保存日期
time 只保存时间
year只保存年

datetime保存日期+时间
timestamp保存日期+时间

特点:
			字节	范围			时区等的影响
datetime	8		1000——9999		不受
timestamp	4	    1970-2038
DROP TABLE IF EXISTS tab_date;
CREATE TABLE tab_date(
	t1 DATETIME,
	t2 TIMESTAMP

);
#now()获取当前时间
INSERT INTO tab_date VALUES(NOW(),NOW());

SELECT * FROM tab_date;

在这里插入图片描述
以上就是mysql中的主要数据类型,相信大部分读者都有一定的编程语言基础,数据类型还是比较好理解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值