# 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

# 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

# 空间占用计算示例:

假设有1000万行数据:

  • 使用 INT(10):1000万 × 4字节 = 约 38.1 MB
  • 使用 BIGINT(10):1000万 × 8字节 = 约 76.3 MB
  • 多占用一倍空间

# 总结:

  1. bigint(10) 占用 8字节int(10) 占用 4字节
  2. 括号中的数字只影响显示,不影响存储
  3. 选择依据:根据数据范围决定,而不是显示宽度
  4. 在Ruoyi中,主键通常用 bigint(20),小范围数值用 int(11) 或更小的整数类型
Last Updated: 4/3/2026, 6:47:37 AM