tinyint 1bytessmallint 2bytesint 4bytesbigint 8bytes不同类型的int能够存储的数字范围不一样
create table t6(id tinyint);insert into t6 values(256),(-129);得出结论:tinyint默认就会空出一位存储正负号"""其实所有的int类型默认都是空出一位存储正负号"""
create table t7(id tinyint unsigned);insert into t7 values(256),(-129);结论:正负号可以通过约束条件去除掉
float(255,30)总共255位小数位占30位double(255,30)总共255位小数位占30位decimal(65,30)总共65位小数占30位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);
1.三者精确度不同精确度最高 : decimal2.精确度排序decimal > double > float具体使用结合实际情况char(4) 定长 最多存储四个字符 超出了则报错 没超出则用空格填充 varchar(4) 变长 最多存储四个字符 超出了则报错 没超出有几个存几个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');
出现失真的情况,是因为MySQL配置文件内缺少了SQL_MODE内严格模式代码简称:sql_mode : 严格模式(如果一个数据不符合数据规范就拒绝存储)本身系统默认自带show variables like '%mode%';
set session : 只在当前操作界面有效set global : 全局有效set global sql_mode = 'strict_trans_tables';exit
mysql -uroot -p
show variables like '%mode%';
create table t13(id int(3));insert into t13 values(111111);'''数字在数字类型中并不是用来限制存储长度 而是用来控制展示长度'''
create table t14(id int(8) unsigned zerofill);insert into t14 values(1111);insert into t14 values(111111111);zerofill : 运用0填充验证
unsigned : 去除正负号
create table t15(id int);
char(4) : 定长 最多存储4个字符 超出了则报错 没超出则用空格填充 varchar(4) : 变长 最多存储4个字符 超出了则报错 没超出则有几个存储几个create table t17(id int,name char(5));insert into t17 values(1,'tom');
char_length()
set global sql_mode='strict_trans_tables,pad_char_to_full_length'
exit
mysql -uroot -p
show variables like '%mode%';
insert into t17 values(2,'a');
select char_length(name) from t17;
create table t18(id int,name varchar(5));insert into t18 values(1,'tom');select char_length(name) from t18;
char 优势:整存整取 速度快 劣势:浪费存储空间char作用: char在存储时:固定了字符的长度不够的会空格填充。在取得时候固定取存时候的长度即可char存储格式: char(6) jason tony jack kevinvarchar 优势:节省存储空间 劣势:存取数据的时候都需要先考虑报头 速度较于char慢varchar作用: varchar在存储时: 没有固定字符的长度。在每次取得时候会有一个报头,先取报头然后再取真实数据 varchar存储格式: varchar(6) 1bytes+jason1bytes+tony1bytes+jack1bytes+kevin 所以在存储数据长度差异不大得时候使用char,数据长度差异很大情况下使用varchar