环境
DBMS:MySQL 8.0.17
工具:Navicat Premium 11.2.16
整数类型
数据类型 | 说明 | 字节 | 范围 |
tinyint[(n)] | n表示数据长度,与范围无关 | 1 |
带符号:-27~27-1 无符号:0~28-1 |
smallint[(n)] | n表示数据长度,与范围无关 | 2 |
带符号:-215~215-1 无符号:0~216-1 |
mediumint[(n)] | n表示数据长度,与范围无关 | 3 |
带符号:-223~223-1 无符号:0~224-1 |
int / integer[(n)] | n表示数据长度,与范围无关 | 4 |
带符号:-231~231-1 无符号:0~232-1 |
bigint[(n)] | n表示数据长度,与范围无关 | 8 |
带符号:-263~263-1 无符号:0~264-1 |
创建基本表test并添加列n:
插入数据“128”(tinyint的范围为:-128~127),发现报错:
也就是说,数据不能超出数据类型的范围。
指定整数类型时默认情况为带符号整数,若要表示无符号整数,则需在整数类型后添加关键字unsigned。
整数类型 UNSIGNED
修改列n的类型为无符号的tinyint型:
插入数据“-1”,发现报错:
也就是说,无符号整数不能有负数数据。
0填充会在当前数据长度小于显示长度时,在数据前用0填充。
可以在整数类型后添加关键字zerofill,表示0填充。定义0填充需要定义数据长度。
整数类型(长度) ZEROFILL
0填充效果在Navicat下无法看到,需要在命令行下才能看到。
为列n定义0填充,并定义数据长度为5:
使用命令行,插入数据“1”,再查询test表:
小数类型
数据类型 | 含义 | 字节 | 范围 |
decimal[(m,d)] | m位数字组成,小数点后有d位数字的定点数。默认m=10,d=0。 | m+2 | 依赖于m和d的取值 |
float[(m,d)] | m位数字组成,小数点后有d位数字的单精度浮点数。默认无限制位数。 | 4 | 最小非零值:±1.175494351e–38 |
double[(m,d)] | m位数字组成,小数点后有d位数字的双精度浮点数。默认无限制位数。 | 8 | 最小非零值:±2.2250738585072014e–308 |
创建基本表test,定义字段de、f、d,三个字段都是取m=5,d=2:
向三个字段都插入值“123.456”(小数位超出),发现没有报错:
查看基本表test的记录,可以看到三个字段都对数据进行四舍五入,最后保留2位小数:
也就是说,保存的数据小数位数大于d时会进行四舍五入,保留d位小数处理。
向三个字段都插入值“1234.56”(整数位超出),发现报错:
也就是说,保存的数据整数位数大于m-d时会报错。
字符类型
数据类型 | 说明 |
char(n) | 长度为n的定长字符串,n最大取255 |
varchar(n) | 最大长度为n的不定长字符串,n最大取255 |
tinytext | 文本,最大长度为28 |
mediumtext | 文本,最大长度为214 |
text | 文本,最大长度为216 |
longtext | 文本,最大长度为222 |
日期时间类型
数据类型 | 字节 | 范围 |
timestamp | 4 | 19700101080001~20380119111407 |
datetime | 8 | 1000-01-01 00:00:00~9999-12-31 23:59:59 |
二进制数据类型
数据类型 | 说明 |
tinyblob | 最大长度为256B |
blob | 最大长度为64KB |
mediumblob | 最大长度为16MB |
longblob | 最大长度为4GB |
其他类型
枚举类型
ENUM(字符串1,字符串2,...)
创建基本表test,定义字段e为枚举类型:
插入数据“e”(枚举类型中没有预定义的字符串),发现报错:
插入数据“a,b,c,d”(枚举类型中多个预定义字符串),发现报错:
也就是说,枚举类型的数据必须是预定义的字符串,而且只能取其中之一。
集合类型
SET(字符串1,字符串2,...)
创建基本表test,定义字段s为集合类型:
插入数据“e”(集合类型中没有预定义的字符串),发现报错:
插入数据“a,b,c,d”(集合类型中多个预定义字符串):
也就是说,集合类型的数据必须是预定义的字符串,但是可以取多个预定义字符串。