整形

分类:
tinyint、smallint、mediumint、int/integer、bigint
1 2 3 4 5

如何设置无符号和有符号

  1. drop table if exists tab_int;
  2. create table tab_int (
  3. t1 int,
  4. t2 int unsigned
  5. );

使用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

都会受到时区影响。