1.数值数据类型:包括整数类型tinyint、smallint、mediumint、int、bigint,浮点小数数据类型float、double,定点小数类型decimal。
2.日期/时间类型:包括year、time、date、datetime和timestamp。
3.字符串类型:包括char、varchar、binary、varbinary、blob、text、enum和set。
1.1 整数类型
数值型数据类型主要用来存储数字,不同的数据类型存储提供不同的取值范围,可以存储的值的范围越大,其所需要的空间越大。根据实际需要选择最合适的类型,这样有利于提高查询的效率和节省存储空间。并且整数类型的属性字段可以添加AUTO_INCREMENT自增约束条件。
不同数据类型的存储和取值
类型名称 | 说明 | 存储要求 | 有符号 | 无符号 |
tinyint | 很小的整数 | 1个字节 | -128~127 | 0~256 |
smallint | 小的整数 | 2个字节 | -32768_32767 | 0~65535 |
mediumint | 中等大小的整数 | 3个字节 | -8388608-8388607 | 0~16777215 |
int | 普通大小的整数 | 4个字节 | -2147483648~2147483647 | 0~4294967295 |
bigint | 大整数 | 8个字节 | -9223372036854775808~9223372036854775807 | 0~18446744073709551615 |
sql语句中,字段的数据类型INT(11),注意到后面的数字11,这表示的是该数据类型指定的显示宽度,显示宽度和数据类型的取值范围是无关的,数值的位数小于指定的宽度时会有空格填充。如果插入了大于显示宽度的值,只要该值不超过该类型整数的取值范围,数值依然可以插入,而且能够显示出来。
1.2 浮点数类型和定点数类型
浮点类型有两种:单精度浮点类型(float)和双精度浮点类型(double),定点类型只有一种:decimal。浮点类型和定点类型都可以可以用可以用(M,N)来表示,其中M称为精度,表示总共的位数;N表示标度,是表示小数的位数。
类型名称 | 说明 | 存储需求 |
float | 单精度浮点数 | 4个字节 |
double | 双精度浮点数 | 8个字节 |
decimal(M,N) | 压缩的"严格"定点数 | M+2个字节 |
float和double在不指定精度时,默认会按照实际的精度,decimal如不指定精度,默认为decimal(10,0)。在mysql中,定点数以字符串存储,在对精度要求比较高的时候(如货币、科学数据)使用decimal的类型比较好。另外两个浮点数进行减法和比较运算时,也容易出问题,所以在使用浮点型时需要注意,并尽量避免做浮点数比较。