常见的数值类型的表字段有:TINYINT、SMALLINT、MEDIUMINT、INT、INTEGER、BIGINT、FLOAT、DOUBLE、DECIMAL几种。
在数值类型中存在符合范围的的概念,分别是有符号(SIGNED)范围和无符号(UNSIGNED)范围,简单理解有符号范围指的是包含负数,无符号范围指的是只有正数,不包含负数的数据类型。
TINYINT类型:
TINYINT类型的含义是小整数值,数据大小为1字节。
有符号范围:(-128 ~ 127),无符号范围:(0 ~ 255)。
SMALLINT类型:
SMALLINT类型的含义是大整数值,数据大小为2字节。
有符号范围:(-32768 ~ 32767),无符号范围:(0 ~ 65535)。
MEDIUMINT类型:
MEDIUMINT类型的含义也是大整数值,比SMALLINT类型范围更广,数据大小为3字节。
有符号范围:(-8388608 ~ 8388607),无符号范围:(0 ~ 16777215)。
INT和INTEGER类型:
(-2147483648 ~ 2147483647),无符号范围:(0 ~ 4294967295)。BIGINT类型:
(-2^63 ~ 2^63-1),无符号范围:``(0 ~ 2^64-1)`。FLOAT类型:
FLOAT类型的含义是单精度浮点数值,数据大小为4字节。
有符号范围:(-3.402823466 E+38 ~ 3.402823466351 E+38),无符号范围:0 和 (1.175494351 E-38 ~ 3.402823466 E+38)。
DOUBLE类型:
DOUBLE类型的含义是双精度浮点数值,数据大小为8字节。
有符号范围:(-1.7976931348623157 E+308 ~ 1.7976931348623157 E+308),无符号范围:0 和 (2.2250738585072014 E-308 ~ 1.7976931348623157 E+308)。
DECIMAL类型:
在所有的数值类型中,整数值不是越大越合适,要根据自己数据的存储需求,按需来选择需要设置的数据类型。
整数值的范围越大,那么占用的空间就越大,合理设置数据类型很关键。
浮点数小数一般都会用DESCIMAL数据类型。
在这么多种数值类型中,如何选择出真正适合当前应用场景的数据类型呢?在前面也说了,不是越大越好,要越合理越好,下面的例子带你理解明白。
1)人员年龄字段的数据类型选择
根据这个字段的字面意思,我们大体知道这个字段是存储人员的年龄的,那么年龄的数值范围一定不会特别大,像前面看到的几个大整数值完全可以不采用,但是很多情况下,开发只知道INT类型,INT类型的数值范围非常的广,范围大确实很好,但是对于年龄这个需求来说没必要那么大,范围大了,采用INT类型占用4个字节,占用的空间也很大。
因此要明白一个道理,合适自己的才是最好的,像第一种介绍的数值类型TINYINT,在年龄中不会存在负数,因此可以采用TINYINT类型的无符号范围,这个数据类型虽然是小整数值,但是范围却是0 ~255之间,那么足够年龄的使用了。
SQL如下所示:
age TINYINT UNSIGNED
2)分数字段的数据类型选择
小数类型可以使用DOUBLE和DECIMAL两者都可,没有太大的区别,要考虑分数不会超过一千分,因此小数点中左边最大只会有3个,分数中包含小数,但是都是.5之类的,因此小数点右边只会有1个,根据分析得知,精度为4,标度为1。
fenshu DOUBLE(4,1)
fenshu DECIMAL(4,1)
在字符串数据类型中使用最多的就是CHAR和VARCHAR两种,TEXT和LONGTESXT也是常用的字符串数据类型。
其中带有TEXT的数据类型是针对文本的数据类型,带有BLOB的数据类型是针对二进制文本的数据类型,二进制的字符串存储很少用,会有专门的文件服务器进行存储,数据库存储二进制字符串性能不高。
| 类型 | 大小 | 描述 |
|---|---|---|
| CHAR | 0~ 255 bytes | 定长字符串 |
| VARCHAR | 0 ~ 65535 bytes | 变长字符串 |
| TINYBLOB | 0 ~ 255 bytes | 不超过255个字符的二进制数据 |
| TINYTEXT | 0 ~ 255 bytes | 短文本字符串 |
| BLOB | 0 ~ 65535 bytes | 二进制形式的长文本数据 |
| TEXT | 0 ~ 65535 bytes | 长文本数据 |
| MEDIUMBLOB | 0 ~ 16777215 bytes | 二进制形式的中等长度文本数据 |
| MEDIUMTEXT | 0 ~ 16777215 bytes | 中等长度文本数据 |
| LONGBLOB | 0 ~ 4 294967295 bytes | 二进制形式的极大文本数据 |
| LONGTEXT | 0 ~ 4 294 967295 bytes | 极大文本数据 |
CHAR和VARCHAR的区别
无论使用CHAR还是VARCHAR都需要指定字符串的长度,例如
char(10) varchar(10)。CHAR是定长字符串,当我们指定存储字符串的长度为10,如果写入的文本字符串的数量不够10个,则会以空格进行填充,性能比VARCHAR好。
VARCHAR是变长字符串,当我们指定存储字符串的长度为10,写入了几个文本字符串就算几个,不会用空格进行补充,由于需要计算写入的字符串数量与总长度进行比较,因此VARCHAR的性能略低与CHAR。
当明确指定该字段写入的字符串数量,并且一定会写入指定数量的字符串时,选择CHAR作为数据类型。
当不固定用户会写入多少个字符串时,但是由文字数量限制,此时就使用VARCHAR作为数据类型。
例如用户名是无法固定的,采用VARCHAR作为数据类型,而性能是固定的,只有一个字符串,则使用CHAR数据类型。
name varchar(10)
xingbie char(1)
常见的日期时间的数据类型有:DATE、TIME、YEAR、DATETIME、TIMESTAMP等,其中最为常用的是DATE、TIME和DATATIME这三种。
DATE类型
TIME类型
YEAR类型
DATETIME类型
TIMESTAMP类型
当字段为入职时间、毕业时间、出生时间等等,像这种只能固定到年月日的字段,使用DATE数据类型。
像创建时间、更新时间、加入时间等等可以追踪的字段,使用DATETIME类型。