# mysql中bigint(10)与int(10)哪一个占用占用空间大?
直接回答:bigint(10) 比 int(10) 占用空间大
详细对比:
| 类型 | 存储空间 | 字节数 | 数值范围(有符号) | 数值范围(无符号) |
|---|---|---|---|---|
| bigint(10) | 8字节 | 64位 | -9.22×10¹⁸ 到 9.22×10¹⁸ | 0 到 1.84×10¹⁹ |
| int(10) | 4字节 | 32位 | -2.15×10⁹ 到 2.15×10⁹ | 0 到 4.29×10⁹ |
# 重要概念澄清:
**bigint(10)**括号中的数字 10 是 显示宽度,不是存储长度!
- 它只影响 ZERO-FILL(零填充) 时的显示效果
- 不影响实际存储空间
- 不影响数值范围
# 示例验证:
-- 创建测试表
CREATE TABLE test_size (
a BIGINT(10), -- 8字节
b INT(10), -- 4字节
c BIGINT(5), -- 同样是8字节
d INT(5), -- 同样是4字节
e BIGINT, -- 默认显示宽度,还是8字节
f INT -- 默认显示宽度,还是4字节
);
-- 查看存储信息(不同数据库查看方式不同)
SHOW TABLE STATUS LIKE 'test_size';
-- 或
SELECT
COLUMN_NAME,
DATA_TYPE,
COLUMN_TYPE,
NUMERIC_PRECISION,
NUMERIC_SCALE,
-- 实际存储大小
CASE DATA_TYPE
WHEN 'bigint' THEN '8 bytes'
WHEN 'int' THEN '4 bytes'
END as storage_size
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'test_size';
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# ZEROFILL 示例:
CREATE TABLE test_zerofill (
id1 INT(5) ZEROFILL, -- 显示宽度5,零填充
id2 BIGINT(10) ZEROFILL -- 显示宽度10,零填充
);
INSERT INTO test_zerofill VALUES (123, 123456);
-- 显示效果:
-- id1: 00123 (显示为5位,不足补0)
-- id2: 0000123456 (显示为10位,不足补0)
-- 但存储空间不变:id1=4字节,id2=8字节
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 空间占用计算示例:
假设有1000万行数据:
- 使用
INT(10):1000万 × 4字节 = 约 38.1 MB - 使用
BIGINT(10):1000万 × 8字节 = 约 76.3 MB - 多占用一倍空间
# 总结:
- bigint(10) 占用 8字节,int(10) 占用 4字节
- 括号中的数字只影响显示,不影响存储
- 选择依据:根据数据范围决定,而不是显示宽度
- 在Ruoyi中,主键通常用
bigint(20),小范围数值用int(11)或更小的整数类型