Loading

MySql中int 与 int unsigned 的区别

先了解一下两者都代表什么意思

int(10)

给 int 类型设置字节长度为 10,int 类型默认的值范围大小是:-2147483648和2147483647

unsigned

设置 int 类型不能为负数。

创建 MySql 表进行演示

创建 test-in 演示 int(10)

CREATE TABLE `test-in` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
)
  1. 向 test-in 表中插入数据。
insert into `test-in` values(2147483647);
insert into `test-in` values(-2147483648);
  1. 查看表中数据。

image.png

  1. 尝试一下,在这两个区间之外进行插入数据,是否可以成功插入。

image.png

image.png

  1. 上面图中可以看到两条 Sql 均都报出异常,插入的值超出了范围,没办法进行插入数据,只能在 int 范围区间内进行数据插入。

创建 test-un 演示 int unsigned

CREATE TABLE `test-un` (
  `id` int unsigned NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
)
  1. 创建后查询一下 sql

image.png

在 sql 语句中,我并没有指定 int 类型的字节长度,执行完 sql 以后,unsigned 会默认设置 int 字节长度为 10。

  1. 上述中说过使用 unsigned 属性是没办法向表中插入负数的,这里尝试一下

image.png

可以看到图中提示插入的值超出了范围,由于 unsigned 属性的限制,我们没有办法插入负数。

  1. 测试超过 int 默认的整数最大值插入

image.png

上图中插入成功了,说明在使用 unsigned 属性时,将默认 int 类型的取值范围调整了。

  1. 调整后的 int 取值范围

intMaxValue = 2147483648 + 2147483647 = 4294967295

  1. 测试一下是否真的可以插入 4294967295 到数据库中

image.png

答案是可以的。

区别总结

  1. 默认的 int 类型,取值范围是 -2147483648-2147483647 之间,而 unsigned 的取值范围是 0-4294967295 之间。
  2. 默认的 int 类型,允许插入负数,unsigned 设置后,无法插入负数。

原文链接:https://segmentfault.com/a/1190000023306375

posted @ 2021-10-09 12:06  Dhoopu  阅读(1791)  评论(0编辑  收藏  举报