本帖最后由 镖师 于 2023-7-12 16:55 编辑
整数类型
5种:TINYINT、SMALLINT、MEDIUMINT、INT(或INTEGER)、BIGINT
整数类型 |
字节 |
有符号数取值范围 |
无符号数取值范围 |
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 |
INT(11) 的 11 是数据的显示宽度,即数据的长度,INT的无符号最大值是:4294967295,加上符号,一共11位,所以INT的11就是这么来的;
但是注意:不是说写了显示宽度就限制这么长,比如 INT(2),你存999999进去是能存的;显示宽度如果不配合 ZEROFILL 是没有任何意义的:
filed INT(3) ZEROFILL -- 存入 5 ,则查出来是:005
MySQL8.0.17 开始,整数类型不再推荐使用 显示宽度 了;
UNSIGNED 无符号
没有负数;
filed INT UNSIGNED
浮点数
2种:float 4、double 8、real(real其实就是double,可以通过修改my.ini将real表示为float)
DOUBLE(5,2); 5表示整数位 + 小数位 = 5位,2表示小数位2位,即:-999.99 ~ 999.99 都可以存入,超出报错;
说明:浮点类型,也可以加UNSIGNED ,但是不会改变数据范围,例如:FLOAT(3,2) UNSIGNED仍然只能表示0-9.99的范围。
从MySQL 8.0.17开始,FLOAT(M,D)和DOUBLE(M,D)用法在官方文档中已经明确不推荐使用,将来可能被移除。另外,关于浮点型FLOAT和DOUBLE的UNSIGNED也不推荐使用了,将来也可能被移除。
对于浮点数,不要用 = 判断;
定点数
1种:Decimal
假设定义 DECIMAL(5,2) 的类型,表示该列取值范围是 -999.99~999.99。
DECIMAL(M,D) 的最大取值范围与DOUBLE类型一样,但是有效的数据范围是由M和D决定的。
定点数在MySQL内部是以 字符串 的形式进行存储,这就决定了它一定是精准的。
当DECIMAL类型不指定精度和标度时,其默认为DECIMAL(10,0)。
“由于 DECIMAL 数据类型的精准性,在我们的项目中,除了极少数(比如商品编号)用到整数类型外,其他的数值都用的是 DECIMAL,原因就是这个项目所处的零售行业,要求精准,一分钱也不能差。 ” ——来自某项目经理
|