1、MySQL中的数据类型
类型 | 类型举例 |
---|---|
整数类型 | TINYINT、SMALLINT、MEDIUMINT、INT(或INTEGER)、BIGINT |
浮点类型 | FLOAT、DOUBLE |
定点数类型 | DECIMAL |
位类型 | BIT |
日期时间类型 | YEAR、TIME、DATE、DATETIME、TIMESTAMP |
文本字符串类型 | CHAR、VARCHAR、TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT |
枚举类型 | ENUM |
集合类型 | SET |
二进制字符串类型 | BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB |
JSON类型 | JSON对象、JSON数组 |
空间数据类型 | 单值类型:GEOMETRY、POINT、LINESTRING、POLYGON; 集合类型:MULTIPOINT、MULTILINESTRING、MULTIPOLYGON、GEOMETRYCOLLECTION |
2、整数类型
整数类型 | 字节 | 有符号数取值范围 | 无符号数取值范围 |
---|---|---|---|
TINYINT | 1 | -128~127 | 0~255 |
SMALLINT | 2 | -32768~32767 | 0~65535 |
MEDIUMINT | 3 | -8388608~8388607 | 0~16777215 |
INT、INTEGER | 4 | -2147483648~2147483647 | 0~4294967295 |
BIGINT | 8 | -9223372036854775808~9223372036854775807 | 0~18446744073709551615 |
UNSIGNED : 无符号类型(非负),所有的整数类型都有一个可选的属性UNSIGNED(无符号属性),无符号整数类型的最小取值为0。
3、浮点类型
浮点数和定点数类型的特点是可以 处理小数 ,你可以把整数看成小数的一个特例。因此,浮点数和定点数的使用场景,比整数大多了。 MySQL支持的浮点数类型,分别是 FLOAT
、DOUBLE
、REAL
。
类型 | 字节 | 有符号数取值范围 | 无符号数取值范围 |
---|---|---|---|
FLOAT | 4 | (-3.402823466E+38,-1.175494351E-38),0,(1.175494351E-38,3.402823466E+38) | 0,(1.175494351E-38,3.402823466E+38) |
DOUBLE | 8 | (-1.7976931348623157E+308,-2.2250738585072014E-308) ,0,(2.2250738585072014E-308,1.7976931348623157E+308) | 0,(2.2250738585072014E-308,1.7976931348623157E+308) |
REAL
默认就是 DOUBLE
。如果你把 SQL 模式设定为启用“ REAL_AS_FLOAT
”,那 么,MySQL 就认为REAL
是 FLOAT
。如果要启用“REAL_AS_FLOAT
”,可以通过以下 SQL 语句实现:
SET sql_mode = “REAL_AS_FLOAT”;
MySQL允许使用 非标准语法
(其他数据库未必支持,因此如果涉及到数据迁移,则最好不要这么
用): FLOAT(M,D)
或 DOUBLE(M,D)
。这里,M称为 精度
,D称为 标度
。(M,D)中 M=整数位+小数位,D=小数位。 D<=M<=255,0<=D<=30。
如果存储时,小数点部分若超出范围,则四舍五入;若四舍五入后,整数部分超出范围,则MySQL报错,并拒绝处理。如FLOAT(5,2)列内插入999.995和-999.995都会报错。
浮点数类型有个缺陷,就是不精准。因为浮点数是不准确的,所以我们要避免使用“=”来判断两个数是否相等。
精准的数据类型:定点数类型DECIMAL
。
4、定点数类型
类型 | 字节 | 含义 |
---|---|---|
DECIMAL(M,D),DEC,NUMERIC | M+2字节 | 有效范围由M和D决定 |
使用 DECIMAL(M,D)
的方式表示高精度小数。其中,M被称为精度,D被称为标度。0<=M<=65,0<=D<=30,D<M。例如,定义DECIMAL(5,2)
的类型,表示该列取值范围是-999.99~999.99。
DECIMAL(M,D)的最大取值范围与DOUBLE类型一样,但是有效的数据范围是由M和D决定的。
5、位类型:BIT
BIT
类型中存储的是二进制值,类似010110。
二进制字符串类型 | 长度 | 长度范围 | 占用空间 |
---|---|---|---|
BIT(M) | M | 1 <= M <= 64 | 约为(M + 7)/8个字节 |
BIT类型,如果没有指定(M),默认是1位。这个1位,表示只能存1位的二进制值。这里(M)是表示二进制的位数,位数最小值为1,最大值为64。