面试题:MySQL 中 int(11) 的 11 表示什么?

在 MySQL 中,INT(11) 是一种常见的整数类型定义方式。这里的 11 经常被误解为存储的位数或取值范围,但实际上它的含义与此不同。以下是详细解释:


1. INT(11) 中的 11 的含义

  • 显示宽度INT(11) 中的 11 表示显示宽度(Display Width),即在某些客户端或工具中显示数字时,默认显示的最小字符数。
  • 不影响存储大小INT 类型的存储大小是固定的(4 字节),与显示宽度无关。
  • 不影响取值范围INT 类型的取值范围是固定的(-2147483648 到 2147483647),与显示宽度无关。

2. 显示宽度的作用

  • 格式化输出:当使用 ZEROFILL 属性时,显示宽度会起作用。例如:
    CREATE TABLE example (
        id INT(11) ZEROFILL
    );
  • 无 ZEROFILL 时:如果没有 ZEROFILL,显示宽度对数据存储和查询结果没有任何影响。

3. INT 类型的存储大小和取值范围

  • 存储大小INT 类型固定占用 4 字节(32 位)。
  • 取值范围
    • 有符号(Signed):-2147483648 到 2147483647。
    • 无符号(Unsigned):0 到 4294967295。

4. 其他整数类型的显示宽度

  • TINYINT:1 字节,显示宽度默认为 4。
  • SMALLINT:2 字节,显示宽度默认为 6。
  • MEDIUMINT:3 字节,显示宽度默认为 9。
  • INT:4 字节,显示宽度默认为 11。
  • BIGINT:8 字节,显示宽度默认为 20。

5. 示例

5.1 创建表

CREATE TABLE example (
    id INT(11) ZEROFILL,
    value INT(5)
);

5.2 插入数据

INSERT INTO example (id, value) VALUES (123, 123);

5.3 查询数据

SELECT * FROM example;
  • id 列会显示为 00000000123(用前导零填充到 11 位)。
  • value 列会显示为 123(没有 ZEROFILL,显示宽度无效)。

6. 总结

  • INT(11) 中的 11 是显示宽度,仅在某些客户端或工具中影响数字的显示格式。
  • 显示宽度不影响 INT 类型的存储大小和取值范围。
  • 如果需要用前导零填充数字,可以使用 ZEROFILL 属性。
  • 在实际开发中,如果没有特殊需求,可以忽略显示宽度,直接使用 INT

常见误区

  1. 误区一INT(11) 表示存储 11 位数字。
    • 事实:INT 只能存储 10 位数字(有符号)或 11 位数字(无符号),与显示宽度无关。
  2. 误区二INT(11) 比 INT(5) 占用更多存储空间。
    • 事实:INT 的存储大小固定为 4 字节,与显示宽度无关。
  3. 误区三:显示宽度会影响查询性能。
    • 事实:显示宽度仅影响数据的显示格式,对查询性能没有影响。

通过理解 INT(11) 的真正含义,可以避免在实际开发中产生误解和错误。

THE END
点赞6 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容