mysql int多长 int(1)类型的值范围是多少呢

本文详细介绍了MySQL中Tinyint数据类型的使用方法及其有符号和无符号情况下的取值范围。通过实例演示了如何创建带有Tinyint字段的表,并验证其有效值区间。

MySQL支持多种数据类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。其中, 整数类型包括:tinyint、smallint、mediumint、int和bigint。 默认都是有符号的。

变为无符号,需要手动加unsigned。

age int unsigned

age tinyint unsigned

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

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

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

在MySQL的数据类型中,Tinyint的取值范围是:带符号的范围是-128到127。无符号的范围是0到255

Tinyint占用1字节的存储空间,即8位(bit)。

    其中,tinyint的大小为1字节,即8位二进制。在无符号的情况下,值得范围(0,255)。在有符号的情况下,值得范围(-128,127)。本文将通过测试验证tinyint值的范围。

1.有符号
1.1建表
    创建表person,包含name 和score两列。其中score的类型是Tinyint,默认为有符号。

create table person (
  name varchar(20),
  score tinyint
);
1.2插入数据
mysql> insert into person values('April',128);
ERROR 1264 (22003): Out of range value for column 'score' at row 1
mysql> insert into person values('April',127);
Query OK, 1 row affected (0.00 sec)

 插入128时报错,原因是值越界。插入127时成功。这验证了tinyint在有符号的情况下,上界是127。

mysql> insert into person values('April',-129);
ERROR 1264 (22003): Out of range value for column 'score' at row 1
mysql> insert into person values('April',-128);
Query OK, 1 row affected (0.00 sec)

插入-129时报错,原因是值越界。插入-128时成功。这验证了tinyint在有符号的情况下,下界是-128。

1.3 查询数据
select * from person;

2.无符号 
2.1建表

创建表person,包含name 和score两列。其中score的类型是Tinyint unsigned 。

create table person (
  name varchar(20),
  score tinyint unsigned
);
2.2插入数据
mysql> insert into person values('April',256);
ERROR 1264 (22003): Out of range value for column 'score' at row 1
mysql> insert into person values('April',255);
Query OK, 1 row affected (0.00 sec)
    插入256时报错,原因是值越界。插入255时成功。这验证了tinyint在无符号的情况下,上界是255。

mysql> insert into person values('April',-1);
ERROR 1264 (22003): Out of range value for column 'score' at row 1
mysql> insert into person values('April',0);
Query OK, 1 row affected (0.00 sec)
    插入-1时报错,原因是值越界。插入0时成功。这验证了tinyint在无符号的情况下,下界是0。

2.3查询数据
select * from person;
   

    综上,tinyint在无符号的情况下,值得范围(0,255)。在有符号的情况下,值得范围(-128,127)。

<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这样设置是为了完整显示极端。 需要提醒用户注意存储范围差异。int的4字节存储范围是±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、付费专栏及课程。

余额充值