1、基本介绍
数据类型:
数据类型是指列、存储过程参数、表达式和局部变量的数据特征,其决定了数据的存储格式,代表了不同的信息类型。具体包括:整型、小数型、日期时间型、字符型、复合型、二进制型。
2、整型
数据类型 | 存储范围 | 字节 |
---|---|---|
TINYINT | 有符号值:-128至127(-27至27-1)<br />无符号值:0至255(0至2^8-1) | 1 |
SMALLINT | 有符号值:-32768至32767(-215至215-1)<br />无符号值:0至65535(0至2^16-1) | 2 |
MEDIUMINT | 有符号值:-8388608至8388607(-223至223-1)<br />无符号值:0至16777215(0至2^24-1) | 3 |
INT | 有符号值:-2147483648至2147483647(-231至231-1)<br />无符号值:0至4294967295(0至2^32-1) | 4 |
BIGINT | 有符号值:-9223372036854775808至9223373036854775807(-263至263-1)<br />无符号值:0至18446744073709551615(0至2^64-1) | 8 |
注意:
- 计算机在最终存储数据时,是以二进制的形式存储的,此时就涉及到存储数字时正负数的问题。有符号位是指数字的最高位用0或1来表示数字是正数还是负数;无符号位则不存在数字是负数的情况,但二者的实际存储范围是一致的。详细的介绍可以参考已完结的二进制基础专题。
<br /> - 假设说需要存储一个人的年龄,一般来说大致范围是0至100多一点,当然在存储时可以选择BIGINT类型,但是一条BIGINT类型的数据就占用8个字节,而TINYINT类型只占用1个字节,当待存储数据的数量是上千万条时,选择TINYINT类型的优越性就会凸显出来,因此在数据优化时的原则之一,就是选择最合适的而不是最大的数据类型。
3、小数型
数据类型 | 存储范围
----|------|----
DECIMAL(M,D)| M的取值范围为1-65,取0时会被设为默认值,超出范围会报错。<br />D的取值范围为0-30,而且必须<=M,超出范围会报错。<br />M是数字总位数,D是小数点后面的位数。<br /> M的默认取值为10,D默认取值为0。<br />用于表示精度确定的小数类型。
FLOAT[(M,D)]| -3.402823466E+38至-1.175494351E-38,<br />1.175494351E-38至3.402823466E+38。<br />M是数字总位数,D是小数点后面的位数。<br />如果M和D被省略,则根据硬件允许的限制来储存值。<br />单精度浮点数精确到大约7位小数位。
DOUBLE[(M,D)]| -1.7976931348623157E+308至-2.2250738585072014E-308,<br />0,<br />2.2250738585072014E-308至1.7976931348623157E+308。<br />M是数字总位数,D是小数点后面的位数。
注意:
- “E+38”代表科学计数法,即1038,同理“E-38”指的是10-38。
<br /> - M始终是大于或等于D,例如FLOAT(5,2),表示总共有5位数,小数点后有2位数,因此最大值为999.99。
4、日期时间型
列类型 | 格式| 存储范围| 存储需求
----|------|----
YEAR| yyyy|‘1901’至‘2155’ |1
TIME| hh:mm:ss|'-838:59:59'至'838:59:59'| 3
DATE| yyyy-MM-dd|'1000-01-01'-'9999至12-31'| 3
DATETIME| yyyy-MM-dd hh:mm:ss|'1000-01-01 00:00:00'<br />至<br />'9999-12-31 23:59:59'| 8
TIMESTAMP| yyyy-MM-dd hh:mm:ss|'1970-01-01 00:00:01' UTC <br />至<br />'2038-01-19 03:14:07' UTC| 4
注意:
- YEAR可以储存为2位或4位,默认是4位,当存储为2位时,范围是‘1970’至‘2069’。
<br /> - TIMESTAMP即时间戳,会自动获取当前的服务器时间,且与时区密切相关,如果以我国所在的东八区为例,则时间戳的范围是'1970-01-01 08:00:01' UTC 至'2038-01-19 11:14:07'
<br /> - TIME类型的小时数如此之大,是因为其不仅可以用于表示一天的时间,还可以为表示事件之间的时间间隔。
5、字符型
列类型 | 存储需求
----|------|----
CHAR(M)| M个字节,0<=M<=255
VARCHAR(M)|如果记录存储长度在0-255字节之间,则共L+1个字节<br />如果记录存储长度超过255字节,则共L+2个字节<br />其中L<=M,且0<=M<=65535
TINYTEXT| L+1个字节,其中L<2^8
TEXT| L+2个字节,其中L<2^16
MEDIUMTEXT| L+3个字节,其中L<2^24
LONGTEXT| L+4个字节,其中L<2^32
注意:
-
CHAR属于定长类型,VARCHAR属于变长类型,且都必须用括号注明其大小;不同的是,当存储的数据小于指定长度时,CHAR类型会用空格补齐,而VARCHAR则不会,可参考下图示例:
当指定长度为4个字节的时候,不论存储的值是多少,CHAR类型始终存储4个字节,空缺用空格补齐;而VARCHAR类型则是根据数据的实际多少进行存储,且用1个字节来记录长度;当达到存储设定的上限时,未被储存的值会舍弃。
<br /> - “L+x个字节”的意思是指对于变长类型在处理数据时,需要把数据内容和数据长度都保存起来,因此会保存需要的L个字节,另加x个字节来记录长度。
6、复合型
列类型 | 存储需求
----|------|----
ENUM('value1','value2',……)| 1或2个字节,取决于枚举值的个数,最多65535个值
SET('value1','value2',……)| 1、2、3、4或8个字节,取决于SET成员的数目,最多64个成员
注意:
- ENUM类型只允许在枚举值中取得一个值,可以更好的处理例如“人的性别”这种相互排拆的数据,类似于单选项。
<br /> - SET类型可以从预定义的集合中取得任意数量的值,类似于多项选。
7、二进制型
列类型 | 存储需求
----|------|----
BINARY(M)| M个字节,0<=M<=255
VARBINARY(M)|L+1个字节,其中L<=M,且0<=M<=65535
TINYBLOB| L+1个字节,其中L<2^8
BLOB| L+2个字节,其中L<2^16
MEDIUMBLOB| L+3个字节,其中L<2^24
LONGBLOB| L+4个字节,其中L<2^32
注意:
- BINARY和VARBINARY类型,类似于CHAR和VARCHAR类型。但是不同的是,其存储的不是字符串,而是二进制串。
<br /> - BLOB类型与TEXT类型相似,同样具有4种大小不同的类型,只不过用来存储二进制数据。
<br /> - 二进制类型与字符串类型的区别在于:字符串类型的数据按字符为单位进行存储,因此存在多种字符集、多种字符序;而二进制类型的数据按字节为单位进行存储,仅存在二进制字符集binary。
版权声明:欢迎转载,欢迎扩散,但转载时请标明作者以及原文出处,谢谢合作! ↓↓↓