整形类型
具体类型 | 字节 | 数据范围 |
---|
TINYINT[(M)] [UNSIGNED] [ZEROFILL] | 1 | 无符号:[0,
2
8
?
1
2^{8}-1
28?1],有符号:[-
2
7
2^7
27,
2
7
?
1
2^7-1
27?1] | SMALLINT[(M)] [UNSIGNED] [ZEROFILL] | 2 | 无符号:[0,
2
16
?
1
2^{16}-1
216?1],有符号:[-
2
15
2^{15}
215 ,
2
15
?
1
2^{15}-1
215?1] | MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL] | 3 | 无符号:[0,
2
24
?
1
2^{24}-1
224?1],有符号:[-
2
23
2^{23}
223,
2
23
?
1
2^{23}-1
223?1] | INT|INTEGER[(M)] [UNSIGNED] [ZEROFILL] | 4 | 无符号:[0,
2
32
?
1
2^{32}-1
232?1],有符号:[-
2
31
2^{31}
231,
2
31
?
1
2^{31}-1
231?1] | BIGINT[(M)] [UNSIGNED] [ZEROFILL] | 8 | 无符号:[0,
2
64
?
1
2^{64}-1
264?1],有符号:[-
2
63
2^{63}
263,
2
63
?
1
2^{63}-1
263?1] |
整形注意事项
- 定义时的M,比如int(M),指示的是最大显示宽度,最大值是255
- ZEROFILL 零填充,比如INT(4) ZEROFILL,5的会显示为‘0005’;注意ZEROFILL已被废弃
- BOOL, BOOLEAN, 意思同 TINYINT(1),0表示false,非0表示true;但是反过来不成立,TRUE 仅仅等于1,FALSE 仅等于0
- SERIAL 是别名,表示 BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE.
浮点型和定点型
浮点型和定点型,定义时的M,比如double(M,D),指示的是可以存储的数字的总的位数
FLOAT
FLOAT[(M,D)]
FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]表示的数据范围是:
- -3.402823466E+38 to -1.175494351E-38
- 0
- 1.175494351E-38 to 3.402823466E+38
FLOAT(p)
对MySql来说意义不大,仅仅是用来指示是 4字节的FLOAT(p为0 to 24)还是8字节的DOUBLE(p为25 to 53),
DOUBLE
DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]表示的数据范围:
- -1.7976931348623157E+308 to -2.2250738585072014E-308
- 0
- 2.2250738585072014E-308 to 1.7976931348623157E+308
REAL
If the REAL_AS_FLOAT SQL mode is enabled, REAL is a synonym for FLOAT rather than DOUBLE.
DECIMAL、DEC
DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL],M指示可以存储的数字的总的位数,D是小数位数;
- M的最大值是65,默认值是10
- D的最大值是30,默认值是0;
- DEC是DECIMAL的别名,DEC(M,D)的字节大小是M+2
NUMERIC
在MySQL中NUMERIC与DECIMAL是等价的
浮点型和定点型注意事项
- 定义时的M,比如double(M,D),指示的是可以存储的数字的总的位数
- 对于FLOAT, DOUBLE和 DECIMAL来说,UNSIGNED 属性不再推荐使用,以后可能会废弃
- FLOAT(M,D) 是非标准的SQL,以后可能会废弃
位类型bit
- bit(M),M指示的是位数,范围是1~64,默认是1。字节大小根据M的值,1~8字节
其他注意
-
如果添加了ZEROFILL 属性, MySQL 自动添加UNSIGNED属性 -
AUTO_INCREMENT 超过最大值是,从1开始,且不支持负数;AUTO_INCREMENT 对 FLOAT 和DOUBLE 的支持已废弃 -
CHECK约束与AUTO_INCREMENT 不能同时出现 -
9223372036854775807 是有符号BIGINT,严格模式下, SELECT 9223372036854775807 + 1会报错; 可以使用强制类型转换 SELECT CAST(9223372036854775807 AS UNSIGNED) + 1
也可以使用DECIMAL类型的字面量 select 9223372036854775807.0 + 1
-
两个整形相减,如果有一个是UNSIGNED,结果就是UNSIGNED;如果结果为负值,那会报错
|