MySQL的数据类型有大概可以分为5种,分别是 整数类型、浮点数类型和定点数类型、日期和时间类型、字符串类型、二进制类型。
整数类型
类型名称 | 存储需求 | 有符号 | 无符号 |
TINYINT | 1BYTE | -128~127 | 0~255 |
SMALLINT | 2BYTES | -32768~32767 | 0~65535 |
MEDIUMINT | 3BYTES | -8388608~8388607 | 0~16777215 |
INT(INTEGER) | 4BYTES | -2147483648~2147483647 | 0~4294967295 |
BIGINT | 8BYTES | -9223372036854775808~9223372036854775807 | 0~18446744073709551615 |
浮点数类型和定点数类型
类型名称 | 说明 | 存储需求(BYTES) |
FLOAT | 单精度浮点数 | 4 |
DOUBLE | 双精度浮点数 | 8 |
DECIMAL(M,D) | 压缩的“严格”定点数 | M+2 |
- M:数值的总位数。 通俗点讲,就是看有多少个数字,比如,5.6789,M就是5。D:小数点后面能保留几位。 比如上面的5.6789 ,D就是4。 这只是举一个例子,来说明M,D是什么,实际是先有M,D的,然后在来控制数值,而不是更具数值来确定M,D。不单单就MECIMAL有M,D这两个参数,FLOAT 和 DOUBLE 都有。
- FLOAT、DOUBLE、DECIMAL三者的区别?
都是用来表示我们所说的小数的也就是浮点数,但是三种的精度不一样,也就是后面显示的位数不一样,
区别一:
FLOAT显示后面的小数点位大概在40多位,
DOUBLE能显示的就是300多位了,不是一个层次上的,
DECIMAL这个小数点后面能显示的位数跟DOUBLE差不多,
区别二:
FLOAT和DOUBLE在不指定精度时,也就是不用(M,D),默认会按照实际的精度,也就是你写多少就是多少,而DECIMAL如不指定精度默认为(10,0),也就是如果不指定精度,插入数值56.89,在数据库中存储的就是57。所以一般使用DECIMAL时就会指定精度,而使用FLOAT和DOUBLE就不用。
区别三:
浮点数相对与定点数(DECIMAL)的优点就是在长度一定的情况下,浮点数能够表示更大的数据范围,但是缺点是会引起精度问题。
- 什么时候使用FLOAT、DOUBLE、DECIMAL?
对精度要求比较高的时候,比如货币、科学数据等,使用DECIMAL的类型比较好。其他的时候,看你要存放的数据的大小而定了,一般使用DOUBLE。并且在使用浮点数时需要注意,尽量避免做浮点数的比较,比如加、减,谁大谁小,这样的操作,会引起精度缺失。
日期与时间类型
类型名称 | 日期格式 | 日期范围 | 存储需求(BYTES) |
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~9999-12-31 23:59:59 | 8 |
TIMESTAMP | YYYY-MM-DD HH:MM:SS | 1970-01-01 00:00:00 UTC~2038-01-19 03:14:07UTC | 4 |
字符串类型
类型名称 | 说明 | 存储需求(BYTES) |
CHAR(M) | 固定长度的非二进制字符串 | M, 1<=M<=255 |
VARCHAR(M) | 变长非二进制字符串 | L+1 , L<=M和1<=M<=255 |
TINYTEXT | 非常小的非二进制字符串 | 1+L, L<2^8 |
TEXT | 小的非二进制字符串 | 2+L, L<2^16 |
MEDIUMTEXT | 中等大小的非二进制字符串 | 3+L , L<2^24 |
LONGTEXT | 大的非二进制字符串 | 4+L, L<2^32 |
ENUM | 枚举类型,只能有一个枚举字符串值 | 1或者2,取决于枚举值的数目,最大值65535 |
SET | - | 1,2,3,4,8,取决于集合成员的数量,最多64个成员 |
二进制类型
类型名称 | 说明 | 存储需求(BYTES) |
BIT(M) | 位字段类型 | 大约(7+M)\8 |
BINARY(M) | 固定长度二进制字符串 | M |
VARBINARY(M) | 可变长度二进制字符串 | 1+M |
TINYBLOM(M) | 非常小的BLOB | 1+L, L<2^8 |
BLOB(M) | 小BLOB | 2+L,L<2^16 |
MEDIUMBLOB(M) | 中等大小的BLOB | 3+L,L<2^24 |
LONGBLOB(M) | 非常大的BLOB | 4+L,L<2^32 |