mysql 整数型数据大小_mysql 中 整数 类型大小显示问题

MySQL 数据库中 整型类型有那些?

由小到大顺序有 tinyint < smallint < int < bigint

首先 MySQL 中,设置的length,和精度没有关系,而是配合 zerofill 用来显示指定位数的数据的。

测试开始 建立表

CREATE TABLE `NewTable` (

`n` int(2) UNSIGNED ZEROFILL NULL DEFAULT NULL ,

`m` int(6) UNSIGNED ZEROFILL NULL DEFAULT NULL ,

`x` int(11) UNSIGNED ZEROFILL NULL DEFAULT NULL

)

ENGINE=InnoDB

DEFAULT CHARACTER SET=utf8mb4 COLLATE=utf8mb4_general_ci

ROW_FORMAT=DYNAMIC

;

测试 插入语句

INSERT INTO `pic_`.`test` (`n`, `m`, `x`) VALUES ('1', '1', '1');

INSERT INTO `pic_`.`test` (`n`, `m`, `x`) VALUES ('10', '10', '10');

INSERT INTO `pic_`.`test` (`n`, `m`, `x`) VALUES ('1000', '1000', '1000');

INSERT INTO `pic_`.`test` (`n`, `m`, `x`) VALUES ('10000', '10000', '10000');

INSERT INTO `pic_`.`test` (`n`, `m`, `x`) VALUES ('100000', '100000', '100000');

INSERT INTO `pic_`.`test` (`n`, `m`, `x`) VALUES ('1000000', '1000000', '1000000');

测试结果 查询结果

mysql> select * from test;

+---------+---------+-------------+

| n | m | x |

+---------+---------+-------------+

| 01 | 000001 | 00000000001 |

| 10 | 000010 | 00000000010 |

| 1000 | 001000 | 00000001000 |

| 10000 | 010000 | 00000010000 |

| 100000 | 100000 | 00000100000 |

| 1000000 | 1000000 | 00001000000 |

+---------+---------+-------------+

6 rows in set (0.00 sec)

结论

从上面的结果得出 int 的 length 不能决定存储数据的精度。配合 zerofill 可以决定返回结果 至少是 length 的位数,但是,精度(或者数据)无损。

下面说下我对整型中绝对精度的理解

MySQL 类型

占用字节数

占用位数

默认长度

有符号范围

无符号范围

tinyint

1

8

4

-128 ~ 127

0 ~ 255

smallint

2

16

6

-32768 ~ 32767

0 ~ 63335

int

4

32

11

-2147483648 ~ 2147483647

0 ~ 4294836225

big

8

64

20

-9223372036854775808 ~ 9223372036854775807

0 ~ 18446744073709552000

计算方法

硬盘中存储数据的时候,一个字节占用8位,一位中存储的数据就是 0 || 1,我上面表格中有一列是占用位数,

后面计算范围的时,我们通过这个位数来计算,

有符号,代表可以表示正负,而这个符号,占用一位存储空间,

我们使用 tinyint 做例子计算下范围。

从上表中得出,tinyint 占用8位

有符号范围可以表示为 2^7 ~ 2^7 - 1 计算结果是:-128 ~ 127。 后面因为 0 属于没符号的范围,所以需要减一;

无符号范围可以表示为 0 ~ 2^8 计算结果是:0 ~ 255。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值