整形类型
具体类型 | 字节 | 数据范围 |
---|---|---|
TINYINT[(M)] [UNSIGNED] [ZEROFILL] | 1 | 无符号:[0, 28−12^{8}-128−1],有符号:[-272^727, 27−12^7-127−1] |
SMALLINT[(M)] [UNSIGNED] [ZEROFILL] | 2 | 无符号:[0, 216−12^{16}-1216−1],有符号:[-2152^{15}215 , 215−12^{15}-1215−1] |
MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL] | 3 | 无符号:[0, 224−12^{24}-1224−1],有符号:[-2232^{23}223, 223−12^{23}-1223−1] |
INT|INTEGER[(M)] [UNSIGNED] [ZEROFILL] | 4 | 无符号:[0, 232−12^{32}-1232−1],有符号:[-2312^{31}231, 231−12^{31}-1231−1] |
BIGINT[(M)] [UNSIGNED] [ZEROFILL] | 8 | 无符号:[0, 264−12^{64}-1264−1],有符号:[-2632^{63}263, 263−12^{63}-1263−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;如果结果为负值,那会报错