先了解一下两者都代表什么意思
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`)
)
- 向 test-in 表中插入数据。
insert into `test-in` values(2147483647);
insert into `test-in` values(-2147483648);
- 查看表中数据。
- 尝试一下,在这两个区间之外进行插入数据,是否可以成功插入。
- 上面图中可以看到两条 Sql 均都报出异常,插入的值超出了范围,没办法进行插入数据,只能在 int 范围区间内进行数据插入。
创建 test-un 演示 int unsigned
CREATE TABLE `test-un` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
)
- 创建后查询一下 sql
在 sql 语句中,我并没有指定 int 类型的字节长度,执行完 sql 以后,unsigned 会默认设置 int 字节长度为 10。
- 上述中说过使用 unsigned 属性是没办法向表中插入负数的,这里尝试一下
可以看到图中提示插入的值超出了范围,由于 unsigned 属性的限制,我们没有办法插入负数。
- 测试超过 int 默认的整数最大值插入
上图中插入成功了,说明在使用 unsigned 属性时,将默认 int 类型的取值范围调整了。
- 调整后的 int 取值范围
intMaxValue = 2147483648 + 2147483647 = 4294967295
- 测试一下是否真的可以插入 4294967295 到数据库中
答案是可以的。
区别总结
- 默认的 int 类型,取值范围是 -2147483648-2147483647 之间,而 unsigned 的取值范围是 0-4294967295 之间。
- 默认的 int 类型,允许插入负数,unsigned 设置后,无法插入负数。