MySQL数据类型操作(char与varchar)

一:MySQL数据类型之整型

1.整型
tinyint		1bytes
smallint	2bytes
int			4bytes
bigint		8bytes

不同类型的int能够存储的数字范围不一样
1.要注意是否存负数(正负号需要占一个比特位)
2.针对手机号码只能用bigint
image

2.验证不同类型的int是否会空出一个存储正负号
create table t6(id tinyint);
insert into t6 values(256),(-129);
得出结论:tinyint默认就会空出一位存储正负号

"""其实所有的int类型默认都是空出一位存储正负号"""
image

3.增加约束条件 去除正负号(unsigned)
create table t7(id tinyint unsigned);
insert into t7 values(256),(-129);

结论:正负号可以通过约束条件去除掉

image

二:浮点型

1.浮点型
float(255,30)
总共255位小数位占30位
double(255,30)
总共255位小数位占30位
decimal(65,30)
总共65位小数占30位
2.验证浮点型精确度
create table t8(id float(255,30));
create table t9(id double(255,30));
create table t10(id decimal(65,30));
insert into t8 values(1.1111111111111111111111111111);
insert into t9 values(1.1111111111111111111111111111);
insert into t10 values(1.1111111111111111111111111111);

image

1.三者精确度不同
精确度最高 	: decimal

2.精确度排序
decimal > double > float
3.浮点型精确度使用那个?
一般情况下小数点后面只保留两位 所以float足矣
如果是从事高精密业务 则需要考虑更高的精确度

注意:
有时候很多看似需要用数字存储的数据 可能都是存的字符串

  • 课外扩展:
    python本身对数字的精确度很低 之所以能够从事人工智能和数据分析完全得益于功能强大的模块

三:字符类型

1.字符类型
char(4)  	 定长
	最多存储四个字符 超出了则报错 没超出自动空格填充至四个
	
varchar(4)    变长
	最多存储四个字符 超出了则报错 没超出有几个存几个
2.验证字符类型是否限制
create table t11(id int,name char(4));
create table t12(id int,name varchar(4));
insert into t11 values(1,'jason');
insert into t12 values(1,'jason');

针对5.6版本超出范围不会报错 而是自动帮你截取并保存(此行为不合理)
image

3.失真原因
出现失真的情况,是因为MySQL配置文件内缺少了SQL_MODE内严格模式代码
简称:
sql_mode	: 严格模式(如果一个数据不符合数据规范就拒绝存储)本身系统默认自带
4.SQL_MODE(修改配置文件(永久))
4.1.模糊查询(过滤)

show variables like '%mode%';
image

4.2修改修改
set session		: 只在当前操作界面有效
set global 		: 全局有效
4.3直接修改配置文件
set global sql_mode = 'strict_trans_tables';

4.4修改完成后 重新启动后才生效

exit
mysql -uroot -p

4.5再次查询即成功了

show variables like '%mode%';
image

四:研究数字在数字类型与字符类型中的区别

1.验证数字在数字类型中是否是用来限制存储长度
create table t13(id int(3));
insert into t13 values(111111);

'''在整型中括号内的数字并不是用来限制存储的长度
而是用来控制展示的长度我们以后在定义整型字段的时候
不需要自己添加数字 使用默认的就可以'''
image

2.验证数字在数字类型中是用来展示长度的
create table t14(id int(8) unsigned zerofill);
insert into t14 values(1111);
insert into t14 values(111111111);

zerofill : 运用0填充验证
unsigned : 去除正负号
image

3.结论:以后遇到数字类型不要指定数字 让他使用自带的即可

create table t15(id int);
image
结论:整型比较的特殊 是唯一个不是用来限制存储长度的类型

五:char与varchar差异

1.char()与varchar()数字的差异
char(4) : 定长
    最多存储4个字符 超出了则报错 没超出则用空格填充
    
varchar(4) : 变长
    最多存储4个字符 超出了则报错 没超出则有几个存储几个
2.验证char定长特性
create table t17(id int,name char(5));
insert into t17 values(1,'tom');

image

3.统计某个字段数据对应的长度

char_length()

4.上述方法还是无法验证 需要先(取消底层优化操作)

set global sql_mode='strict_trans_tables,pad_char_to_full_length'

5.退出MySQL重启启动后生效

exit
mysql -uroot -p

6.查询已经修改成功

show variables like '%mode%';
image

5. 再次验证

insert into t17 values(2,'a');

6.查看长度(没超出则用空格填充)

select char_length(name) from t17;
image

7.验证varchar变长特性
create table t18(id int,name varchar(5));
insert into t18 values(1,'tom');
8.查看长度

select char_length(name) from t18;
image

六:char与varchar对比(那个比较好)

1.char(全面介绍)
char
    优势:整存整取 速度快
    劣势:浪费存储空间

char作用:
	char在存储时:固定了字符的长度不够的会空格填充。在取得时候固定取存时候的长度即可

char存储格式:
    char(6)
    	jason  tony  jack  kevin
2.varchar(全面介绍)
varchar
      优势:节省存储空间
      劣势:存取数据的时候都需要先考虑报头 速度较于char慢

varchar作用:
	varchar在存储时: 没有固定字符的长度。在每次取得时候会有一个报头,先取报头然后再取真实数据
    	
varchar存储格式:    	
	varchar(6)
    	1bytes+jason1bytes+tony1bytes+jack1bytes+kevin 
3.总结

所以在存储数据长度差异不大得时候使用char,数据长度差异很大情况下使用varchar

4.补充(创建字段加注释)

在创建字段的时候可以加上相应的注释
create table t12(
id int comment '序号',
name char(4) comment '姓名'
);

posted @ 2022-01-25 21:00  [OJBK]  阅读(150)  评论(0编辑  收藏  举报