当前位置: 代码网 > it编程>数据库>Mysql > 一文彻底搞懂MySQL中INT的长度和VARCHAR的长度

一文彻底搞懂MySQL中INT的长度和VARCHAR的长度

2026年09月22日 Mysql 我要评论
在 mysql 里,int(11)、varchar(255) 这种写法几乎人人见过,但真正理解它们“长度”含义的人并不多。很多初学者会以为:int(11):最多存 11 位数字

在 mysql 里,int(11)varchar(255) 这种写法几乎人人见过,

但真正理解它们“长度”含义的人并不多

很多初学者会以为:

  • int(11):最多存 11 位数字
  • varchar(255):最多存 255 个字节

👉 这两个理解,一个完全错误,一个只对了一半。

本文用大白话 + 实战视角,一次性把这两个“长度”讲清楚。

一、mysql 中的int:长度 ≠ 存储能力

int到底能存多大?

在 mysql 中,整数类型的取值范围,只和类型本身有关,和 (11) 没关系

类型字节有符号范围
tinyint1-128 ~ 127
int4-2147483648 ~ 2147483647
bigint8非常大
id int

👉 能不能存 2147483647,只由 int 决定。

那int(11)的11是什么意思?

一句话结论:

int(11) 的 11 只是“显示宽度”,不影响存储范围。

也就是说:

int(3)
int(11)
int(100)

👉 存储能力完全一样。

int(11)什么时候才有意义?

只有在配合 zerofill 时,才有意义。

create table t (
  a int(5) zerofill
);

插入:

insert into t values (12);

查询结果:

00012

👉 仅仅是 显示时补 0
👉 实际存的还是数字 12

为什么现在不推荐写int(11)?

  • 显示宽度是历史遗留概念
  • 实际开发几乎不用 zerofill
  • mysql 8.0 已逐步弱化该概念

现代最佳实践:

int
bigint
tinyint

不要再写 (11)

二、mysql 中的varchar:长度是真·限制

int 不同,varchar(n)n 是有实际约束意义的。

varchar(n)的n表示什么?

一句话结论:

varchar(n) 表示最多能存 n 个“字符”

⚠️ 注意:

  • 字符
  • 不是字节
  • 不是显示宽度

字符 ≠ 字节(这是重点)

utf8mb4 字符集下:

内容字符数字节数
a11
13
😀14
name varchar(4) character set utf8mb4

你可以存:

  • abcd(4 个字符)
  • 中秋节啊(4 个字符)
  • 😀😀😀😀(4 个字符)

👉 都合法

mysql 判断是否超长,看的是字符数

varchar在底层是怎么存的?

varchar 是变长字符串,结构大致是:

[长度信息(字符数)] + [真实内容]

长度信息占用:

  • 最大长度 ≤ 255 → 1 字节
  • 最大长度 > 255 → 2 字节
varchar(200)  -- 长度信息占用 1 字节
varchar(500)  -- 长度信息占用 2 字节

varchar为什么不能随便写很大?

行长度限制

innodb 一行最大 ≈ 65535 字节

varchar(30000) character set utf8mb4

理论最大字节数:

30000 × 4 = 120000 ❌

👉 建表直接失败。

索引限制(非常常见)

name varchar(255) character set utf8mb4

如果你建索引:

create index idx_name on user(name);

索引长度可能超过限制,需要写:

create index idx_name on user(name(100));

三、charvsvarchar怎么选?

char(定长)

char(10)
  • 永远占 10 个字符空间
  • 适合长度固定的字段

典型场景:

  • 手机号
  • 状态码
  • 国家码

varchar(变长)

varchar(255)
  • 按实际长度存
  • 更节省空间
  • 大多数字符串字段首选

四、常见误区总结(面试高频)

误区 1:int(11)只能存 11 位数字

✅ 错,取值范围只和 int 有关

误区 2:varchar(255)是 255 字节

✅ 错,是 255 个字符

误区 3:varchar越大越安全

❌ 错,会影响索引、行长度和性能

五、工程级选型建议(直接照抄)

场景推荐类型
主键 idint unsigned / bigint
状态 / 枚举tinyint
用户名varchar(32)
昵称varchar(64)
邮箱varchar(128)
备注 / 描述text

六、一句话总结

int(n) 的 n 只是显示宽度,不影响存储;
varchar(n) 的 n 是字符数量限制,是真正的约束。

到此这篇关于mysql中int的长度和varchar的长度的文章就介绍到这了,更多相关mysql中int长度和varchar长度内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com