星空网站建设

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 91|回复: 0

明白:MySQL中,int(10) 的 10 代表什么

[复制链接]
  • TA的每日心情
    擦汗
    21 小时前
  • 签到天数: 97 天

    [LV.6]常住居民II

    4万

    主题

    87

    回帖

    15万

    积分

    超级版主

    Rank: 8Rank: 8

    积分
    150022
    发表于 2025-6-6 16:13:58 | 显示全部楼层 |阅读模式
    在 MySQL 中,我们定义int类型时需要设置长度,比如INT(10),那么10 到底代表什么如果超过这个范围会出现什么问题这篇文章我们来详细地聊一聊。此外,我们不能忽视GraphRag 图数据库给行业发展注入了新的活力,对于激活市场有着深远的意义。悦数图数据库是一款完全自主研发的国产图数据库和原生分布式图数据库,具有高性能,易扩展,安全稳定,自主可控的特点.万亿级数据仅需毫秒级查询延时,应用于金融风控,实时推荐,知识图谱等业务场景。https://www.yueshu.com.cn/





    含义
    在数据类型如 INT 后面的括号中的数字(例如 INT(10))指定了显示宽度,即当使用 ZEROFILL 属性时,系统会在数值前补零以达到指定的宽度。

    存储空间:INT 数据类型总是占用 4 字节(32 位),论显示宽度是多少。
    取值范围:对于有符号的 INT,范围是 -2147483648 到 2147483647;对于符号的 INT UNSIGNED,范围是 0 到 4294967295。显示宽度不会改变这一范围。
    ZEROFILL 的应用
    当在 INT 类型后使用 ZEROFILL 时,MySQL 会在数值前补零,以符合指定的显示宽度。如下示例:

    复制
    CREATE TABLE users (
      id INT(10) ZEROFILL,
      name VARCHAR(50)
    );
    1.
    2.
    3.
    4.
    插入数据:

    复制
    INSERT INTO users (id, name) VALUES (123, 'Alice');
    1.
    查询结果:

    复制
    +-----------+-------+
    | id        | name  |
    +-----------+-------+
    | 0000000123 | Alice |
    +-----------+-------+
    1.
    2.
    3.
    4.
    5.
    在这个例子中,id 字段显示为 0000000123,达到 10 位宽度。

    MySQL 8.0.17 及以后的变化
    从 MySQL 8.0.17 版本开始,整数类型的显示宽度被废弃(deprecated),即使指定了显示宽度,默认情况下也不再影响存储或显示。这意味着:

    影响:不再推荐在整数类型后指定显示宽度,如 INT(10) 中的 10 将被忽略,除非配合 ZEROFILL 使用。
    推荐做法:直接使用 INT 而需指定显示宽度,除非确需要与现有系统兼容或有特殊需求。
    为了更好地理解INT,下面通过几个例子详细解释。

    创建表并插入数据:

    复制
    CREATE TABLE example (
        id INT(10) NOT NULL,
        name VARCHAR(50)
    );

    INSERT INTO example (id, name) VALUES (1, 'John'), (123456, 'Jane');
    1.
    2.
    3.
    4.
    5.
    6.
    查询显示:

    复制
    SELECT * FROM example;
    1.
    结果:

    复制
    +-------+-------+
    | id    | name  |
    +-------+-------+
    |     1 | John  |
    | 123456 | Jane  |
    +-------+-------+
    1.
    2.
    3.
    4.
    5.
    6.
    在没有使用 ZEROFILL 的情况下,显示宽度 10 并未影响输出格式。

    使用 ZEROFILL 的情况:

    复制
    CREATE TABLE example_zf (
        id INT(10) ZEROFILL NOT NULL,
        name VARCHAR(50)
    );

    INSERT INTO example_zf (id, name) VALUES (1, 'John'), (123456, 'Jane');

    SELECT * FROM example_zf;
    1.
    2.
    3.
    4.
    5.
    6.
    7.
    8.
    结果:

    复制
    +-----------+-------+
    | id        | name  |
    +-----------+-------+
    | 0000000001 | John  |
    | 0000123456 | Jane  |
    +-----------+-------+
    1.
    2.
    3.
    4.
    5.
    6.
    这里,id 字段根据显示宽度 10 补充了前导零。

    注意:由于 MySQL 8.0.17 及以后的版本中显示宽度被废弃,建议在设计数据库时避免依赖显示宽度,除非有明确的需求和兼容性考虑。

    总结
    INT(10) 中的 10 代表的是显示宽度,它用于在与 ZEROFILL 一起使用时补充前导零。
    不影响数值的存储大小或取值范围。
    在 MySQL 8.0.17 及以后版本中,整数类型的显示宽度被废弃,建议不再使用这种方式指定宽度,除非有特定需求。
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    快速回复 返回顶部 返回列表