Mysql 字段设计
一、数据类型:建议与字节保持一致
1、tinyint (1)、smallint (2)、int (4)、bigint (8)
2、float (4) 、double (8) 、decimal(M、D) 包含M个数字,小数点后D位
3、char(255) 、varchar(65535)
*4、时间类型有特定的格式,不需要指定长度
参考图:

首先我们思考三个问题:
1、tinyint(1) 、int (4)、int(11) 有什么区别?
2、varchar(4)、char (4) 有什么区别?
3、double、flout、bigDecimal有什么区别?
1、对于这个问题,我们可以分解成两个小问题,第一个小问题是int 类型和 tinyint 类型有什么区别?第二个小问题是int 类型后面跟的数字有什么作用?
那么我们先解决第一个小问题,tinyint 和 int 的主要区别是它们存储占用空间不同,tinyint占用一个字节,int 占用了4个字节, 存储的数据范围不同,tinyint一般用于存储比较小的数字,更节约空间,性能更高。
第二点,int 后面跟着的数字表示整型数值的显示宽度,不是代表限制数据存储的长度,int 4 和 int 11 本身没什么区别,存储占用4个字节,能存储的数据范围一样。这个显示宽度有且只在设置了 zerofill(零填充) 这个属性后才能发挥作用,当位数不够左边补0,当显示位数够了,不补0。 也就是说,如果存储5这个数字,设置了零填充,int 4 的存储结构为 0005,int 11 的存储结构为00000000005;如果存储555555,int 4存储 555555, int 11存储00000055555
注意:如果设置了零填充,存储的数据会强制变更为无符号存储,4个字节只能存0~21亿的数字啦。我猜设计int 4 是因为这个int 占用4个字节,int 11 是因为int 最大值是十位,加上符号位,刚刚好11。
PS: Navicat 会自动做数据处理,当你 设置了 int 4 + 零填充,存储5,显示可能还是5,看不到笔者说的效果,但是当你导出数据到Excel后,你就能看见0005啦。
2、mysql4.0之后的版本,varchar(M)和char(M) 这个M表示字符个数,不是表示存储字节长度。varchar和char的存储占用字节不同,varchar是变长存储,char是定长存储,varchar(10)和char(10)都可以存储10个字符(数字,字母,汉字),char存储的字符串长度如果没达到10,会在右边补空格,查询时候需要使用trim()函数去掉空格。varchar比char多占用一个字节用于存储字符串长度。另外,char最多可以存储255个字符。
3、float、double、decimal 都是浮点类型,float 类型用于 表示单精度浮点数值,而double 表示双精度浮点数值。这些类型,也有附加参数,一个显示宽度指示器,还有一个小数点指示器,表示值不超过几个数字,小数点后面带有几个数字,如果小数点位数多了,mysql会自动四舍五入为最接近它的值,然后插入。对于float和double在进行运算时候容易丢失精度,decimal用于精度要求非常高的计算,一般用于银行计算,这种类型在进行乘法除法时候不会丢失精度。
浙公网安备 33010602011771号