MySQL int(4)类型的值范围是多少呢?

本文解析了MySQL中INT(n)类型的特性及其与数值显示的关系,并对比了INT与NUMERIC类型的使用场景。

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


mysql> create table t1 (a int(4));
Query OK, 0 rows affected (0.14 sec)

mysql> insert into t1 values(15652);
Query OK, 1 row affected (0.06 sec)

mysql> insert into t1 values(156522);
Query OK, 1 row affected (0.05 sec)

mysql> insert into t1 values(15652256145);
ERROR 1264 (22003): Out of range value adjusted for column 'a' at row 1
mysql> insert into t1 values(1565222);
Query OK, 1 row affected (0.06 sec)

mysql> insert into t1 values(15652222);
Query OK, 1 row affected (0.08 sec)

mysql> insert into t1 values(156522222);
Query OK, 1 row affected (0.05 sec)

mysql> insert into t1 values(1565222222);
Query OK, 1 row affected (0.03 sec)

mysql> insert into t1 values(1565222222)2;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near '2' at
line 1
mysql>

为什么int(4)类型的字段可以插入9位的数字呢?

int(n)中不论n指定为多少,范围都一样-2~31~2^31-1,都能插入9位数字。n只是用来控制显示而已,如果为int(4),插入一个1,显示时也会用空格补齐到4个字节

请问所有mysql中的数据类型中的(n)都是表示显示位数吗?

并非如此,NUMERIC(4)就限定了取值范围,超过4位就不允许写入了。因此如果你想限定数字的取值范围,最好是用NUMERIC来定义。

<think>嗯,用户询问MySQL中bigintint类型据的默认长度问题。首先需要明确"长度"在MySQL类型中的特殊含义——这里容易产生歧义,因为用户可能混淆了储长度和显示宽度。 参考引用[2]和[4]提到,int(5)这种写法中的字5是显示宽度,不影响实际储空间。这很关键,用户可能误以为括号里的字是储长度。实际上int固定占4字节,bigint固定占8字节,这是由类型本身决定的[^2][^4]。 关于默认显示宽度,int类型默认是11位,bigint默认是20位。这个设计很有意思:11位正好对应int有符号最小-2147483648的字符(11个字符),20位对应bigint有符号最小-9223372036854775808的字符(20个字符)[^2]。MySQL这样设置是为了完整显示极端。 需要提醒用户注意范围差异。int4字节范围是±21亿,bigint的8字节范围是±92亿亿[^3]。如果用户储的超过42亿就必须用bigint,否则会溢出报错。 考虑到用户可能混淆概念,准备在回答时强调三点:储长度固定不可变、显示宽度只影响格式化输出、实际范围由字节决定。最后用表格对比会更清晰。 用户没有提到无符号类型,但这也是重要知识点。无符号int范围是0到42亿,显示宽度默认10位(对应最4294967295的10位)。这个补充信息可能对用户有用。</think>在MySQL中,`int`和`bigint`的**默认显示宽度**(即创建表时不指定括号内字时的长度)如下: 1. **int 类型** - **默认显示宽度:`11`** - **实际储空间:固定 `4 字节`** - 范围:有符号 `-2147483648` 到 `2147483647`;无符号 `0` 到 `4294967295` - 示例:定义 `int` 等效于 `int(11)`[^2][^4] 2. **bigint 类型** - **默认显示宽度:`20`** - **实际储空间:固定 `8 字节`** - 范围:有符号 `-9223372036854775808` 到 `9223372036854775807`;无符号 `0` 到 `18446744073709551615` - 示例:定义 `bigint` 等效于 `bigint(20)`[^2][^3] --- ### 关键概念说明: - **显示宽度(如 `int(11)`)** 仅影响客户端显示格式(例如用 `ZEROFILL` 时左侧补零),**不改变范围或占用空间**。`int(3)`、`int(11)` 均占用 4 字节[^2][^4]。 - **储空间与范围** | 类型 | 储空间 | 有符号范围 | 无符号范围 | |-----------|----------|-------------------------------------|-------------------------------| | `int` | 4 字节 | -2147483648 ~ 2147483647 | 0 ~ 4294967295 | | `bigint` | 8 字节 | -9.2e18 ~ 9.2e18 | 0 ~ 1.8e19 | - **选择建议** - 若42亿(如ID、状态码),用 `int` 更节省空间 - 若可能超过42亿(如金融流水、天文据),必须用 `bigint`[^3] --- ### 示例对比 ```sql CREATE TABLE example ( id INT, -- 等效 INT(11), 4字节储 large_id BIGINT -- 等效 BIGINT(20), 8字节); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值