MySQL8.0学习记录02 - 数据类型之数值类型

这篇博客详细介绍了MySQL中的整型数据类型,包括TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT的取值范围和特点。还讨论了浮点型如FLOAT和DOUBLE的存储范围,以及定点类型DECIMAL的用法。文中提到了位类型BIT,并提醒了关于ZEROFILL和UNSIGNED属性的注意事项,以及在数值计算中的行为。此外,还涉及了数据类型的自动增量和存储限制的相关问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

整形类型

具体类型字节数据范围
TINYINT[(M)] [UNSIGNED] [ZEROFILL]1无符号:[0, 28−12^{8}-1281],有符号:[-272^727, 27−12^7-1271]
SMALLINT[(M)] [UNSIGNED] [ZEROFILL]2无符号:[0, 216−12^{16}-12161],有符号:[-2152^{15}215 , 215−12^{15}-12151]
MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]3无符号:[0, 224−12^{24}-12241],有符号:[-2232^{23}223, 223−12^{23}-12231]
INT|INTEGER[(M)] [UNSIGNED] [ZEROFILL]4无符号:[0, 232−12^{32}-12321],有符号:[-2312^{31}231, 231−12^{31}-12311]
BIGINT[(M)] [UNSIGNED] [ZEROFILL]8无符号:[0, 264−12^{64}-12641],有符号:[-2632^{63}263, 263−12^{63}-12631]

整形注意事项

  1. 定义时的M,比如int(M),指示的是最大显示宽度,最大值是255
  2. ZEROFILL 零填充,比如INT(4) ZEROFILL,5的会显示为‘0005’;注意ZEROFILL已被废弃
  3. BOOL, BOOLEAN, 意思同 TINYINT(1),0表示false,非0表示true;但是反过来不成立,TRUE 仅仅等于1,FALSE 仅等于0
  4. 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是等价的

浮点型和定点型注意事项

  1. 定义时的M,比如double(M,D),指示的是可以存储的数字的总的位数
  2. 对于FLOAT, DOUBLE和 DECIMAL来说,UNSIGNED 属性不再推荐使用,以后可能会废弃
  3. 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;如果结果为负值,那会报错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值