---恢复内容开始---
每个常量、变量和参数都有数据类型,它用来指定一定的存储格式,约束和有效范围。MySQL提供了多种数据类型,主要包括数值型、字符串类型、日期和时间类型,不同的MySQL版本支持的数据类型可能会稍有不同。这里一MySQL5.0版本为例。
1:数值类型
MySQL支持所有标准SQL中的数值类型,其中包括严格数值类型(INTEGER、SMALLINT(短整型)、DECIMAL(十进制)和NUMERIC(数值)),以及近似数值类型(FLOAT、REAL(实数)和DOUBLE PRECISION),并在此基础上做了扩展,扩展后增加了TINYINT、MEDIUMINT和BIGINT这3种长度不同的整型,并增加了BIT类型。用来存放位数据,其中INT是INTEGER的同名词,DEC是DECIMAL的同名词、
在整数类型中,按照取值范围和存储方式不同,分为tinyint、smallint、mediumint、int和bigint这5个类型。如果超出类型范围的操作,会发生“out of range”错误提示。为了避免此类问题发生,在选择数据类型时要根据应用的实际情况确定其取值范围,最后根据确定的结果慎重选择数据类型。
对于整数类型,MySQL还支持在类型名称后面的小括号内指定显示宽度,例如int(5)表示数值宽度小于5位的时候在数字前面填满宽度,如果不显示指定宽度则默认是int(11),一般配合zerofill使用,顾名思义,zerofill就是用“0”填充的意思,也就是在数字位不够的空间用字符“0”填满,一下几个例子分别描述了填充前后的区别。
(1)创建表t1,有id1和id2两个字段,指定其数值宽度分别为int和int(5);
在id1和id2中都插入数值1,可以发现格式没有异常;
分别修改id1和id2的字段类型,加入zerofill参数:
可以发现,在数值前面用字符“0”填充了剩余的宽度。大家可能有所疑问,设置了宽度限制后,如果插入大于宽度限制的值,会不会截断或者插不进去报错?答案是肯定的:不会对插入的数据有任何影响,还是按照类型的实际精度进行保存,这时,宽度格式实际已经没有意义,,左边不会再填充任何的“0”字符,下面在表t1的字段id1中插入数值1,id2中插入数值1111111,位数为7,大于id2显示位数5,再观察一下测试结果:
很显然,如上面所说的,id2中显示了正确的数值,并没有受宽度限制影响,
所有的整数类型都有一个可选属性UNSIGNED(无符号),如果需要在字段里面保存非负数或者需要较大的上限值时,可以用此选项,它的取值范围是正常值的下限取0,上限取原值的2倍,例如,tinyint的有符号的范围是-128~+127.而无符号的范围是0~255.如果一个列指定为zerofill,则MySQL自动为该列添加UNSIGNE