我们在设计数据库字段的时候,通常会指定长度,需要明确的是这个长度不是类型的size(byte),而是数据的length,size是数据库系统决定的,他影响我们数值范围和存储空间。length是业务层次的控制,他影响数值的范围和精度,不会影响数据的存储空间。注意区分size和length的区别。下面我们具体来看看MySQL提供的数据类型和使用方式,先来看看数字类型的信息,看完这个描述,我们在设计字段类型时应该有所规范,该使用无符的一定使用无符类型,选择size合适的类型,节省存储空间,float和double是浮点型,decimal是定点型。在指定int或者double时,MySQL允许指定长度和小数点,格式形如FLOAT(6,2),这里的两个参数不能影响数据的存储方式和精度,也就是说他是入库格式设置,长度为6,小数点后保留2位,1234.56是可以入库成功的,3.333是无法入库的,现在明白这两个参数的意思了吧!所以无论float和double无论怎么设置,都是可能丢失精度的。定义字段时如果你不设置长度,MySQL会给出默认长度,下表显示了数字类型的默认长度。decimal能不丢失精度的存储小数,原因就是他以串的方式来存储小数,这个时候就避免了二进制表示小数不全的缺陷,所以尽量使用decimal来存储小数吧。
类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
TINYINT | 1 字节 | (-128,127) | (0,255) | 小整数值 |
SMALLINT | 2 字节 | (-32 768,32 767) | (0,65 535) | 大整数值 |
MEDIUMINT | 3 字节 | (-8 388 608,8 388 607) | (0,16 777 215) | 大整数值 |
INT或INTEGER | 4 字节 | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | 大整数值 |
BIGINT | 8 字节 | (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) | (0,18 446 744 073 709 551 615) | 极大整数值 |
FLOAT | 4 字节 | (-3.402 823 466 E+38,-1.175 494 351 E-38), 0, (1.175 494 351 E-38,3.402 823 466 351 E+38) | 0, (1.175 494 351 E-38,3.402 823 466 E+38) | 单精度 |
DOUBLE | 8 字节 | (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308), 0, (2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 0, (2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 双精度 |
DECIMAL | 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 | 依赖于M和D的值 | 依赖于M和D的值 | 小数值 |
常见类型的长度定义
数据类型 | 默认长度 | 最大长度 |
varchar | 255 | 65535 |
char | 255 | 65535 |
double | 0 | 255 |
floa t | 0 | 255 |
int | 11 | 255 |
tinyint | 4 | 255 |
bigint | 20 | 255 |
date | 0 | 0 |
datetime | 0 | 0 |
text | 0 | 0 |