MySQL 中 int(11) 的 11 表示什么?
MySQL 中 int(11) 的 11 表示什么?
在 MySQL 中,int(11) 中的 11 并不表示整数的取值范围,而是用于显示宽度(Display Width)。它的含义和具体影响如下:
1. 显示宽度的定义
- 显示宽度是指在使用
ZEROFILL属性时,MySQL 返回查询结果时显示的最小数字宽度。 - 如果存储的整数值不足指定的宽度,会用零填充到指定宽度。
例如:
CREATE TABLE example (
id INT(11) ZEROFILL
);
INSERT INTO example (id) VALUES (123);
SELECT id FROM example;
结果:
00000000123
解释:
INT(11)配合ZEROFILL使用,表示输出宽度至少为 11 位,不足部分用0填充。
2. 显示宽度的影响
- 显示宽度不会影响实际存储的数据大小,也不会限制可以存储的数值范围。
int(11)的数值范围完全由INT类型决定,为-2^31到2^31-1(约-21亿到+21亿)。
例如:
- 存储值为
1或12345678901,都会被正确保存,宽度只影响带ZEROFILL的查询显示。
3. 显示宽度是否必要
- 在 MySQL 8.0 中,显示宽度已被废弃,对于整数类型(如
TINYINT、SMALLINT、INT、BIGINT),显示宽度不再生效。 - 原因:显示宽度仅影响数据输出的显示方式,而现代应用通常由客户端程序处理格式化显示,MySQL 保留此功能意义不大。
4. 取值范围与显示宽度的关系
显示宽度与整数类型的取值范围无关,取值范围由数据类型的大小决定:
| 数据类型 | 字节大小 | 有符号取值范围 | 无符号取值范围 |
|---|---|---|---|
| TINYINT | 1 | -128 ~ 127 | 0 ~ 255 |
| SMALLINT | 2 | -32,768 ~ 32,767 | 0 ~ 65,535 |
| INT | 4 | -2,147,483,648 ~ 2,147,483,647 | 0 ~ 4,294,967,295 |
| BIGINT | 8 | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 | 0 ~ 18,446,744,073,709,551,615 |
5. 示例
创建表:
CREATE TABLE demo (
id INT(11) ZEROFILL,
value INT(11)
);
插入数据:
INSERT INTO demo (id, value) VALUES (123, 4567);
查询数据:
SELECT id, value FROM demo;
结果:
id value 00000000123 4567
id列因为使用了ZEROFILL,不足 11 位用0补齐。value列没有ZEROFILL,显示为实际存储的值。
6. 总结
int(11)中的11表示显示宽度,与数据存储大小或取值范围无关。- 显示宽度仅在配合
ZEROFILL使用时有效,用于输出固定长度的数值。 - 从 MySQL 8.0 开始,显示宽度功能已废弃,建议避免依赖此特性。

浙公网安备 33010602011771号