数据类型分类
数值类型
tinyint类型
- 以
tinyint
为例- 所有数值类型默认都是有符号的,无符号的需要在后面加
unsigned
tinyint
的范围在-128~127之间- 无符号的范围在0~255之间(类比char)
create database test_db;
use test_db;
建表时一定要跟着写上属性
mysql> create table if not exists t1(-> num tinyint-> );
//查看
desc t1;
show tables;
show create table t1\G;
//无符号整数
mysql> create table if not exists t2(-> num tinyint unsigned-> );
注意:
- 尽量不使用unsigned,对于int类型可能存放不下的数据,int unsigned同样可能存放不下。
- 与其如此,还不如设计时,将int类型提升为bigint类型,根据自身使用场景,选择合适的数据类型即可。
- 如果我们向mysql特定的类型中插入不合法的数据,mysql一般都是直接拦截,不让我们做对应的操作,与C不同,C会截断再存储
- 反过来,如果我们有数据已经成功插入到mysql中,一定是合法得到
- 所以,mysql中,一般而言,数据类型本身就是一种约束,约束的是程序员
- 这保证了数据库中的数据是可预期的,完整的
- mysql表中建立属性列,列名称在前,类型在后
bit类型
bit[(M)] : 位字段类型。M表示每个值的位数,**范围从1到64**。如果M被忽略,默认为1
mysql> create table if not exists t3(-> id int,//一个bit位,只能插0或插1-> online bit(1)-> );
- online 是位类型,以ASCII码值显示,ASCII码是值,十六进制是显示方式
- 如果看不到,那么其显示方式是字符方式
- 若想让其显示出来,
select id,hex(online) from t3;
验证为何是ASCII码值:
- 首先改变列的属性:
alter table t3 modify online bit(10);
- 97换算成十六进制为61
浮点数类型
float,double,decimal
float
float[(m, d)] [unsigned]
: M指定显示长度,d指定小数位数,占用空间4个字节- 小数:没特殊说明,表示有符号的数,float(4,2)表示的范围是-99.99 ~ 99.99
mysql> create table if not exists t4(-> id int,-> salary float(4,2)-> );
- MySQL在保存值时会进行四舍五入
注意:例如:-99.999四舍五入后为-100.000数据不允许插入
- 如果定义的是
float(4,2) unsigned
这时,因为把它指定为无符号的数,范围是 0 ~ 99.99
create table if not exists t5(id bigint, salary float(4,2) unsigned);
测试float:存在精度损失
float表示的精度大约是7位
alter table t5 modify salary float;
insert into t5 values (1,23456789.234526614);//ok
insert into t5 values (1,2349.234526);
insert into t5 values (1,23429.234526);
select * from t5;
decimal
decimal(m, d) [unsigned] : 定点数m指定长度,d表示小数点的位数
- decimal(5,2) 表示的范围是 -999.99 ~ 999.99
- decimal(5,2) unsigned 表示的范围 0 ~999.99
- float和decimal相似,但是表示的精度不一样
- decimal的精度更准确,因此如果我们希望某个数据表示高精度,选择decima
mysql> create table if not exists t6(-> f1 float(10,8),-> f2 decimal(10,8)-> );
总结:
- float表示的精度大约是7位
- decimal整数最大位数m为65。支持小数最大位数d是30。如果d被省略,默认为0.如果m被省略,默认是10
- 建议:如果希望小数的精度高,推荐使用decimal