下面的内容是听林海峰老师课的总结,下面就先为大家详细介绍它的数据类型们~
先来了解下对应数据类型的范围吧
一、整形字段
"""
整形字段首先分为:
TINYINT、SMALLINT、MEDUIMINT、INT、BIGINT
"""
1 TINYINT型
TINYINT默认情况下是带有符号的
TINYINT超出限制会报错
为大家树立一个案例为大家更好的理解
create table t1(id tinyint);
insert into t1 values(-129),(256);
很明显超出范围会报错
# 约束条件之unsigned无符号
create table t2(id tinyint unsigned);
insert into t2 values(-1),(256);
依旧超出会报错
2 INT型
create table t11(id int);
insert into t11 values(-1),(256);
上述int类型也是默认带符号的,可以推断出所有整形类型默认也是带符号的
"""
特例:只有整形括号内里面的数字不是表示限制位数
id int(8)
如果数字没有8位,那么默认用空格填充至8位
如果数字超过8位,那么有几位写几位(但是还是要遵循最大范围)
"""
create table t11(id int(8) unsigned zerofill);
# 用0填充至8位
insert into t11 values(12);
# 总结:
针对整形字段,括号内无需指定宽度,因为它默认的宽度已经足够显示所有的数据了
二、补充知识点:严格模型
# 查看严格模式
show variables like "%mode";
模糊匹配/查询
关键字 like
%:匹配任意多个字符
_:匹配任意单个字符
# 修改严格模型
set session 只在当前窗口有效
set global 全局有效
set global sql_mode='STRICT_TRANS_TABLES';
# 修改之后,重新进入服务端即可
三、浮点型字段
# 分类:
FLOAT、DOUBLE、DECIMAL
# 存储限制
float(255,30) #总共255位 小数部分占30位
double(255,30) #总共255位 小数部分占30位
decimal(65,30) #总共65位 小数部分占30位
# 精确度验证
create table t12(id float(255,30));
create table t13(id double(255,30) );
create table t14(id decimal(65,30));
insert into t12 values(1.111111111111111111111111);
insert into t13 values(1.111111111111111111111111);
insert into t14 values(1.111111111111111111111111);
# 结果如下所示
# 可知精确度:float<double<decimal
四、字符类型
# 分类:
char
定长
char(4) 数据超过4个字符直接报错,不够4个字符空格补全
varchar
变长
varchar(4) 数据超过4个字符直接报错,不够的话,有几个字符就存几个字符
# 介绍一个方法 char_length统计字符长度
create table t3(name char(4));
create table t4(name varchar(4));
insert into t3 values('a');
insert into t4 values('a');
select char_length(name) from t3;
select char_length(name) from t4;
"""
首先可以肯定的是char硬盘上存的绝对是真正的数据,是带有空格的
但是在显示的时候MYSQL会自动将空格删除,所以上面的char_length结果都为1
"""
# 再次修改sql_mode让MYSQL不要做自动删除
set global sql_mode='STRICT_TRANS_TABLES,PAD_CHAR_TO_FULL_LENGTH';
# 修改完后一定要exit退出重新进入查询
"""
char与varchar对比:
char
缺点:浪费空间
优点:存取都很简单,直接按照固定的字符存取速度即可
varchar
优点:节省空间
缺点:存取较为麻烦,存的时候需要制作报头
取的时候也需要先读取报头,之后才能读取到真实数据
"""
五、日期类型
# 分类
data:年 月 日 2020-5-4
datatime: 年 月 日 时 分 秒 2020-5-4-11:11:11
time:时 分 秒:11:11:11
Year:年:2020
create table t6(
id int,
born_year year,
birth_day data,
study_time time,
reg_time datatime
) ;
insert into t6(1,'2001','2001-4-5','12:12:12','2001-4-5 12:12:12');
六、枚举与集合
# 分类
枚举:enum 多选一
集合:set 多选多
# 具体使用
create table user(
id int,
name char(4),
gender enum('male','female'),
hobby set('read','run','swim','sleep')
) ;
insert into user values(1,'json','male','read,run');
# 枚举类型 后期在存数据的时候只能从枚举里面选一个已有的数据存储
# 集合可以只写一个,但是不能写没有列举的数据