MySQL 支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型 。
1.数值
整型:
类型 | 大小 | 范围(有符号) | 用途 |
tinyint | 1 Bytes | (-128,127) | 小整数值 |
smallint | 2 Bytes | (-32 768,32 767) | 大整数值 |
mediumint | 3 Bytes | (-8 388 608,8 388 607) | 大整数值 |
int | 4 Bytes | (-2 147 483 648,2 147 483 647) | 大整数值 |
bigint | 8 Bytes | (-9,223,372,036,854,775,808,9223372036854775807) | 极大整数值 |
int(n)里的n是表示SELECT查询结果集中的显示宽度,并不影响实际的取值范围,没有影响到显示的宽度
浮点类型:
类型 | 范围 | 用途 |
float(5,3) | 最多6位数字,包括最多3位小数 | 存储用户的身高、体重、薪水等 |
double(10,2) | 最多10位数字,包括最多2位小数 | 双精度浮点数值 |
decimal(M,D) | 最多M位数字,包括最多D位小数 可以存储非常大的数值,具体范围取决于指定的精度和标度 | 非常精确的数值 : 货币金额 |
DECIMAL类型以字符串的形式存储,即使数值没有小数部分,也会按照指定的小数位数来存储。
2.日期/时间
表示时间值的日期和时间类型为datetime、date、timestamp、time和year。
每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。
create table test_time(y year, d date,t time,dt datetime);
insert into test_time values(now(), now(), now(), now());
insert into test_time values(2024, "2024-01-01", "12:00:01", "2024-07-12 11:41:00");
3.字符串
字符串类型指char、varchar、binary、varbinary、blob、text、enum和set。
类型 | 大小 | 用途 |
char | 0-255 bytes | 定长字符串 |
varchar | 0-65535 bytes | 变长字符串 |
TINYBLOB | 0-255 bytes | 不超过 255 个字符的二进制字符串 |
TINYTEXT | 0-255 bytes | 短文本字符串 |
blob | 0-65 535 bytes | 二进制形式的长文本数据 |
text | 0-65 535 bytes | 长文本数据 |
MEDIUMBLOB | 0-16 777 215 bytes | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 0-16 777 215 bytes | 中等长度文本数据 |
LONGBLOB | 0-4 294 967 295 bytes | 二进制形式的极大文本数据 |
longtext | 0-4 294 967 295 bytes | 极大文本数据 |
- char表示定长字符串,长度是固定的;如果插入数据的长度小于char的固定长度时,则用空格填充;因为长度固定,所以存取速度要比varchar快很多,甚至能快50%,但正因为其长度固定,所以会占据多余的空间。
- varchar表示可变长字符串,长度是可变的;插入的数据是多长,就按照多长来存储;varchar在存取方面与char相反,它存取慢,因为长度不固定,但正因如此,不占据多余的空间。
#存储大小固定为10字节
char(10) #列的长度固定为创建表时声明的长度: 0 ~ 255
#根据实际字符串长度占空间,最多10字节
varchar(10) #列中的值为可变长字符串,长度: 0 ~ 65535
1.经常变化的字段用varchar
2.知道固定长度的用char
3.超过255字符的只能用varchar或者text
4.能用varchar的地方不用text
4.枚举类型
枚举值必须是带引号的字符串文字:相当于【单选】
create table shirts (
name varchar(40),
size enum('小', '中', '大', '特大')
);
insert into shirts (name, size) values
('dress shirt','大'),
('t-shirt','中'),
('polo shirt','小');