整形
分类:
tinyint、smallint、mediumint、int/integer、bigint
1 2 3 4 5
如何设置无符号和有符号
drop table if exists tab_int;
create table tab_int (
t1 int,
t2 int unsigned
);
使用unsigned设置无符号,为正值。默认是有符号
如果插入的值超出范围,会报错,out of range
int(7) 如果再搭配zerofill,会默认为无符号,并且数值不够7位用0填充。如果数值长度超过7位也会显示出来。
小数
浮点型
float(M,D)
double(M,D)
定点型
dec(M,D)
decimal(M,D)
M和D的含义
M是整数和小数的长度和
D是小数的长度
如果是decimal,则M默认为10,D默认为0
如果是float和double,则会根据插入的数值的精度决定精度。
定点型的精确度较高,如果要求插入数数值的精度较高如货币运算等则考虑使用。
drop table if exists tab_float;
create table tab_float(
f1 float(5,2),
f2 double(5,2),
f3 decimal(5,2)
);
insert into tab_float(f1,f2,f3) value (1.001,1.001,1.001);
-- 这个超出了小数的的长度,检索出来的值,会存在进行进位什么的,具体要看对应的规则
-- M也就是需要减去D才是整数的长度,现在mysql8的版本,长度如果超过会报错
原则
所选择的类型越简单越好,能保存数值的类型越小越好。
char和varchar类型
说明:用于保存MySQL中较短的字符串。char(M)和varchar(M),其中的M是指字符数,a算一个字符,一个汉字也算一个字符。
char是固定长度的字符,varchar是可变长度的字符。char空间比较耗费。varchar 空间比较节省。char 效率高,varchar效率低
binary和varbinary保存二进制
enum
-- 现在8.0的数据库是只支持这enum中的值,大小需要相同才可以。
create table tab_enum(
e1 enum('a','b','c')
);
insert into tab_enum(e1) values('m');
select * from tab_enum;
set
set和enum的区别是,enum只能选一个,set是可以选多个
create table tab_set(
s1 set ('a','b','c','d')
);
insert into tab_set( s1) values('a');
insert into tab_set (s1 ) values('a,b,c');
select * from tab_set;
日期
date只保存日期
time只保存时间
year值保存年
datetime 保存日期+时间 1000-9999
timestamp保存日期+时间 1970-2038