1.数据类型
数值型
严格数值类型
integer
支持在类型后面的小括号内指定显示宽度,不指定默认是int(11)
配合zerofill使用,就是0填充
只有整数类型有的属性:auto_increment,一般从1开始,每行增加1,一个表中最多有一个自增列,定义为not null 并定义为primary key或者unique
decimal
在保留位数的时候是根据精度和标度来的,并不会四舍五入
numeric(与decimal一样)
近似数值类型
float
real
double precision

bit  
	用来存放位数据,二进制数据(查看位字段值 二进制:Bin   十六进制:hex)
	select bin(id) from tbname;

小数:(M,D) 一共显示M位数字(整数位+小数位一共M位) 精度和标度)
浮点数(没有精度和标度会按照实际精度标度存,有的话并且超过精度标度就会自动四舍五入)
float
double
定点数(定点数不写会按照默认值(10,0)进行操作,写了精度和标度,会按照精度和标度插入 超过标度插入,数据会按照标度插入,数据虽然插进去了,但是会有一个warning)
decimal
在mysql内部以字符串的形式存放,比浮点数更准确,用来表示货币等精确度高的数据 不指定精度,默认的整数位位10,默认的小数位为0
字符串
char
长度固定为创建时声明的长度
会删除尾部的空格
varchar
列中的值为可变长字符串
会保留尾部的空格
binary
varbinary
blob(二进制字符串)
text
与varchar是一样的 ,text需要两个字节空间记录字段的总字节数,varchar的查询速度比text要快(不知道属性的最大长度时,适合用text)
enum(枚举)
它的值需要在创建表的时候通过枚举的方式显示指定(create table t1 (gender enum(“m”,“f”)))
enum类型是忽略大小写,存储m,F都会将他们转化成大写
对于插入不在enum指定范围的值,并没有返回警告,而是插入枚举的第一个值
enum类型只能从值集合选取单个值,不能一起取多个值
set
set类型可以从允许值集合中任意选取一个或多个元素组合
对于超出允许范围的值是不被允许注入到上面的set类型中的
重复的,例如(‘a’,‘b’,‘a’)这种的,只会将a存一次,写入后的结果为(‘a’,‘b’)

日期和时间
data (年月日)
time (时分秒)
datatime (年月日时分秒)
year(年)
比DATA占更少的空间
timestamp(年月日时分秒)
经常插入或者更新日期为当前系统 返回后显示”YYYY-MM-DD HH:MM:SS“ timestamp是与时区相关的 (current_timestamp 表示的是系统日期 ) timestamp类型字段只能有一列的默认值为current_timestamp

2.比较:
char和varchar:
char长度固定为创建时声明发乳长度,varchar为可变的长度
插入一个带空格的数值,char会自动删除尾部空格,而varchar会保留
binary和varbinary(存到表中就是二进制的数据):
两者类似于char和varchar,不同的是他们包含二进制字符串,而不包含非二进制字符串
float和double:
double精确度高
double消耗的内存是float的两倍
double的运算速度比float慢的多
timestamp与datetime的区别:
timestamp支持的时间范围比较小;取值范围是到2038年的某一天,不适合存放比较久远的日期
表中的第一个timestamp列自动设置为当前的日期和时间,其他列是timestamp类型的会设默认值是0,如果强制设成timestamp,会报错
timestamp的插入和查询都受当地时区的影响,更能反应出实际的日期,而datetime只能反映出插入时当地的时区
timestamp的属性受mysql版本和服务器sqlmode的影响很大

3.时间的表示以下几种写法在插入到表中之后都是一样的显示成’YYYY-MM-DD HH:MM:SS’:
‘2007-9-3 12:10:10’
‘2007/9/3 12+10+10’
‘20070903121010’
20070903121010