1、数字
整型:
tinyint,
int,整型括号内规定的宽度只是显示宽度,存储宽度是固定的,其他类型都是存储宽度
bigint
小数:create table t7(x float(255,30),y double(255,30),decimal(65,30))
float,小数位最多30,
double, 小数位最多30,整数位225
decimal 小数位最多30,整数位35
虽然都是支持30位,但float和double小数点的精度不准
2、字符串
char(10):定长,不够则补全空格;浪费空间,读取速度快
varchar:变长,预留1-2bytes来存储真实数据的长度;看起来节省空间,读取速度慢
ps:在存储的数据量刚好达到存储宽度限制时,其实varchar更费空间
总结:大多数情况下存储的数据量都达不到宽度的限制,所以大多数情况下varchar更省空间
但省空间不是关键,关键是省空间带来的io效率提升,进而提升了查询效率
验证:
create table t10(x char(5));
create table t11(x varchar(5));
insert t10 values("我爱你 ");
insert t11 values("你爱他 ");
t10字符个数 5 字节个数 11
t10字符个数 4 字节个数 10
select char_length(x) from t10; --查看字符个数:3 他加一个空格但查长度时,他又给拿走了
select char_length(x) from t11; --查看字符个数:4
set sql_mode="pad_char_to_full_length"; --这样t10就显示长度为5了
select length(x) from t10; --查看字节数:11
select length(x) from t11; --查看字节数:10
3、时间类型
year 范围(1901/2155)
time 时:分:秒(’-838:59:59/838:59:59’)
date 年:月:日
datetime 年:月:日 时:分:秒 (8字节,可以加上not null 使它不为空,default now() on update now()
timestamp 年:月:日 时:分:秒 (4字节,不允许为空,若传入空值,默认放入当前时间,若更新这条记录自动更新时间
实例:
create table student(
id int,
name char(10),
born_year year,
birthday date,
reg_time datetime);
insert student values(2,"Gimgong","1998","1998-01-12",now());
create table t9(
id int,
name varchar(16),
-- update_time datetime not null default now() on update now(),
update_time timestamp,
reg_time datetime not null default now());
4、枚举类型(性别,多选一)与集合类型(多选多)
枚举类型 enum(“m”,“f”,“t”)多选一
集合类型 set(“m”,“f”,“t”)多选多