mysql数据类型

建表语句的完整写法:
create table tableName(
字段名称 数据类型[(宽度) 约束条件]
)
字段名称必须要有,字段名称不能有重复,数据类型必须要有,中括号内的可以没有

宽度指的是储存数据的长度(大小)限制,整型例外,详见整型

约束条件:
数据类型用于限制添加的数据必须是什么类型
约束表现出来的是数据类型外的附加限制


整型:
整型分为有符号和无符号
默认是有符号的,要把数据类型设置为无符号的话是在创建表的时候在数据类型后边添加约束条件unsigned

为整型指定宽度时,仅仅是给查询结果指定显示宽度,与储存范围无关,默认使用int足够正常使用

要控制整型的显示宽度,不仅需要指定宽度还要指定zerofill约束条件,以0来填充不足10位的数据

启用严格模式:
mysql会自动把超过范围的数据转换为该类型的最大值是因为mysql处于非严格模式下,如果mysql处于严格模式下,传入数据超过范围的话会直接报错

如何启用严格模式:
1.查看当前模式
show variables like 'sql_mode';
2修改为严格模式
set global sql_mode='strict_trans_tables';

浮点类型:
float(m,d)#4字节
double(m,d)#8字节
decimal(m,d)#根据长度确定
在浮点类型中,m表示整体的长度,d表示小数部分的长度
注意:长度和字节数无关,长度是用来控制能传入多少位数和显示多少位数,而字节数是浮点类型本身能表示多大数
整数部分的长度是m-d
float(5,3),最大能存99.999
3种浮点类型的相同与不同
相同:小数部分最大位数都是30
不同:float和double的总长度最大都为255,decimal的最大总长度为65


float和double都是不精准的小数,decimal是精准的,decimal底层是用str来存储的,float大概精确到小数点后7位,double大概精确到小数点后14位


在银行系统当中应使用decimal,而一般情况使用float


char和varchar

宽度用于限制字符的长度(字符数)
char为定长
在严格模式下超出范围直接报错,在非严格模式下超出范围则是存限制的最大长度,而不足长度部分则是用空格补齐
varchar为变长
在严格模式下超出范围直接报错,在非严格模式下超出范围则是存限制的最大长度,而不足长度部分不会用空格补齐,即有几个存几个


varchar 在存的时候加了报头,存慢,取慢,但是节省空间
char 则是存快,取快,也没有消耗多少空间

注意:
针对char 类型,mysql在储存的时候回将不足长度的数据用空格补齐然后存到硬盘当中,但在读出结果是会去掉末尾的空格,对于精确的查询一个值,该值后填充的空格是没有用处的,但是在字段进行模糊匹配的时候,该值后填充的空格是有用处的


日期类型:

year:年份,1999
date:年-月-日
time:具体的时间,11:11:11/时-分-秒
datetime:年-月-日 时-分-秒

以上所有类型都可以使用now()函数来输入当前的时间

枚举与集合类型:

枚举enum,提前设置一些值,你的数据只能从这些值当中去选择一个,不然报错,sex enum('male','female')

集合set:提前设置一些值,你的数据只能从这个集合当中去选,一个或者多个,不然报错,hobby set('play','read','swimming')
在选多个的时候数据写在一对引号内,用逗号隔开

原文地址:https://www.cnblogs.com/fushaunglin/p/9636884.html