mysql数据基本类型:整型、小数型、日期类型、字符串、set。
整型
tinyint(L) 、smallint(L)、mediumint(L)、int(L)、bigint(L)
1、依次占空间大小:1字节、2字节、3字节、4字节、8字节。L表示数据长度,也可以不写。
2、在数据类型后面还可以添加关键字
unsigned:表示无符号设置
zerofill:表示长度不足用0补满
小数型
1、浮点型:float(有效数字长度L, 小数长度D)、double(有效数字长度L, 小数长度D)
2、定点型:decimal(整数长度M, 小数长度D)
注意:(1) 在浮点型中,float占4字节,精确度7位左右。double占8字节,精确度15位左右。插入符合有效位数但超过精确度的数据时会丢失精度。
(2) 在定点型中,M不能大于65,D不能大于30。大概9位数字时分配一个字节。小数和整数分开存储。
日期类型
date、time、datetime、timestamp、year
1、依次占空间大小:4字节、3字节、8字节、4字节、1字节。
2、year 可以插入2位数 或者 4位数。插入两位是需要注意临界值69 和 70之间的区别。
3、time表示时间段。范围-838:59:59~838:59:59。插入该字段时还可以写作:天数 HH:mm:ss。
4、时间戳特性:记录发生变化时,自动更新。
字符串
char(字符数量0-255)、varchar(字符数0-65535)、text、enum(值1,值2...)、set
1、varchar额外开销用于保存数据所占空间长度。通常数据库采用utf8,一个字符占3个字节。如果数据本身小于127个字符,额外开销1字节。大于127个字符,额外占用2个字节。
2、字符数超过255,建议使用 文本类型text。
3、enum存储原理:实际上字段所存储的值并不是真正的字符串,而是字符串所对应的下标:当系统设定枚举类型的时候,会给枚举中每个元素定义一个下标,这个下标从1开始。故插入enum类型数据时,可以插入值或者是对应下标。
4、mysql特性:类型自动转换,当数据碰到“+-*/”时,系统就会自动将数据转换成数值,而普通字符串转换成数值为0。可以使用查询语句:select 字段名+0 from 表名;
5、set:集合类型。它可以将多个数据选项同时保存的数据类型,本质是将制定的项按照对应的二进制位来进行控制:1表示选中,0表示未被选中。一个字节8位,故只能对应8个选项。set提供的存储大小为:1字节,2字节,3字节,8字节。基本语法:set('值1','值2','值3'...);。
6、mysql长度记录:mysql规定行总长度不能超过65535个字节。varchar能存储的理论值为65535个字符,而一个字符在不同的字符集中可能占多个字节(utf8占3个字节,gbk占2个字节)。
(1) utf8字符集中,最多能存储65535/3-2 = 21844个字符。(2为varchar额外占用字节)
(2) gbk字符集中,最多能存储65535/2-2 + 1 = 32766个字符。(1为余数)