跳至主要內容

int(1)和int(10)有什么区别

Leo约 941 字大约 3 分钟

听说你还不知道int(1)和int(10)有什么区别

1.int概述

首先int可以设置两个属性,UNSIGNED(无符号)和 ZEROFILL(填充零)

int: 4字节,设置无符号的话,存储值范围是:04294967295,有符号是:-21474836482147483648

int(1) 无符号: 值范围还是04294967295,有符号还是:-21474836482147483648

int(10) 无符号: 值范围还是04294967295,有符号还是:-21474836482147483648

主要区别在于ZEROFILL这个属性,填充零。

int(1) 填充零: 插入id为1的,显示1,因为他设置的长度为1,不需要0来填充。

int(2) 填充零: 插入id为1的,显示01,因为他设置的长度为2,0来填充。

显然int(10) 填充零就是0000000001。

2.MySQL如何处理

首先我们先看下一MySQL中的一些整数类型

类型字节取值范围显示宽度
tinyint1-128 ~ 1274
smallint2-32768 ~ 327676
mediumint3-8388608 ~ 83886079
int4-2147483648 ~ 214748364711
bigint8-9223372036854775808 ~ 922337203685477580720

MySQL 类型关键字后面的括号内指定整数值的显示宽度(例如,INT(4))。

该可选显示宽度规定用于显示宽度小于指定的列宽度的值时从左侧填满宽度。显示宽度并不限制可以在列内保存的值的范围,也不限制超过列的指定宽度的值的显示。

当结合可选扩展属性 zerofill 使用时, 默认补充的空格用零代替。

在MySQL中,当你定义一个表字段的类型为 INT 时,你可以指定一个可选的显示宽度,例如 INT(1)INT(10)。宽度定义了数字的显示字符数。这通常与 ZEROFILL 属性搭配使用,表示未使用的空间应该由0来填充。然而,这个宽度不会影响数据类型在数据库中的存储大小或范围,这意味着 INT(1)INT(10) 存储的数字大小或有效数字范围是一样的。

这里有一个更详细的解释:

  • INT 数据类型: 在MySQL中,INT 是一个整数数据类型,用于存储大小在 -2,147,483,648 到 2,147,483,647 的整数(如果是无符号的 UINT,则是 0 到 4,294,967,295)。无论你后面跟的是 (1) 还是 (10),INT 类型的存储大小始终是 4 字节,并且可以存储相同的数值范围。
  • 宽度 (1) vs (10): INT(1)INT(10) 之间的数字代表显示宽度。实际上,这并不会限制值的范围,只会影响显示。如果字段被设定了 ZEROFILL,例如 INT(3),存储的数值 5 会显示为 005。如果没有使用 ZEROFILL,显示宽度基本没有什么效果。

当在Java程序中与MySQL数据库交互时:

  • 使用JDBC或类似的库来查询数据库时,你可能会操作 INT 类型的列。
  • 检索结果时,Java中通常会使用 ResultSet 对象的 .getInt() 方法来获取整数字段的值,而此时宽度((1)(10))不会有任何影响。
  • Java中的 int 类型与MySQL中的 INT 类型在大多数情况下兼容,Java 的 int 类型也是 4 字节,并且有相同的数值范围。

显示宽度整数类型的取值范围是无关的。

显示宽度只是指明 mysql 最大可能显示的数字个数,数值的位数小于指定的宽度时左侧用数字 0 填充。

如果插入了大于显示宽度的值,只要该值不超过该类型整数的取值范围,数值依然可以插入,而且能够显示出来。