【问题标题】:Is there a difference in using INT(1) vs TINYINT(1) in MySQL?在 MySQL 中使用 INT(1) 和 TINYINT(1) 有区别吗?
【发布时间】:2011-11-08 02:38:48
【问题描述】:

我假设 INT(1) 与 TINYINT(1) 完全相同,但我真的不知道。每当我有只能是单个整数的值(例如值 0-9)时,我总是使用 INT(1) 来表示它是一个整数并且它只会是一个字符,我认为这意味着它只能是 0 到 9 之间的值(如果我错了,请向我解释)。我一直只是忽略您可以将数字转换为的其他类型的 INT。我不精通 MySQL,并且倾向于避免使用它来做更复杂的事情。

所以我的问题是,如果您为每种类型定义长度为 1,那么各种整数类型 INT、TINYINT、SMALLINT、MEDIUMINT 和 BIGINT 之间有什么区别吗? 如果没有,我应该无论如何都要使用它们(我可以看到使用它们来获得更多的语义含义,TINYINT 比 INT 更具体)?如果是这样,我是否可以轻松(和/或应该)浏览我的数据库并将所有 INT(1) 字段更改为 TINYINT(1) 字段?

【问题讨论】:

    标签: mysql types integer


    【解决方案1】:

    整数列类型括号中的数字是“显示宽度”。这不会影响存储要求,因为它们是预定义的。

    进一步阅读

    【讨论】:

    • 所以即使我将 INT(1) 定义为只允许一个字符,无论如何它仍然会用完 4 个字节?
    • @animuson INT(1) not 只允许一个字符。它设置结果集中该列的显示宽度。阅读上面的最后一个链接,它解释得很好
    • 哦,我明白了。我想我应该继续过去的链接 2。o.o 另外,如果我只是将一个字段从 INT 更改为 TINYINT,如果所有值都是 0 和 1,或者我应该不理会它,会不会有什么害处?
    • @animuson 这取决于总大小。如果它可以为您节省 1% 的空间消耗,请不要管它。如果它可以为您节省 20%,请考虑是否真的需要它。如果它可以为您节省 50%,请进行更改。
    • 最后一个链接坏了。
    【解决方案2】:

    在这里你会更好地理解它!

    tinyint: 1 byte, -128 to +127 / 0 to 255 (unsigned)
    smallint: 2 bytes, -32,768 to +32,767 / 0 to 65,535 (unsigned)
    mediumint: 3 bytes, -8,388,608 to 8,388,607 / 0 to 16,777,215 (unsigned)
    int/integer: 4 bytes, -2,147,483,648 to +2,147,483,647 / 0 to 4,294,967,295 (unsigned)
    bigint: 8 bytes, -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 / 0 to 18,446,744,073,709,551,615 (unsigned)
    

    【讨论】:

    • 如果您使用 phpmyadmin,只需在选择类型时将鼠标悬停在选择下拉列表上,它将自动显示所有这些详细信息。 :)
    • 这个答案是错误的,因为用户在定义大小时试图获取差异,这只是显示字段类型的范围
    • 这个答案是一个100% copy/paste from a https://dev.MySQL.com webpage,没有添加、附录、注释或归属。
    【解决方案3】:

    总结接受的答案:

    括号中的数字表示*显示该字段的字符数*,**不是**字段的存储大小。

    但如果你想知道存储大小,你应该查看 MySQL 源文档。

    来源:MySQL Docs: Integer Types (Exact Value) - INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT

    直接引用源文档:

    TINYINT : 1 字节,-128 到 127 有符号,0 到 255 无符号

    SMALLINT:2 个字节,-32768 到 32767 有符号,0 到 65535 无符号

    MEDIUMINT:3 个字节,-8388608 到 8388607 有符号,0 到 16777215 无符号

    INT:4 字节,-2147483648 到 2147483647 有符号,0 到 4294967295 无符号

    BIGINT:8 字节,-2^63 到 2^63-1 有符号,0 到 2^64-1 无符号

    【讨论】:

      猜你喜欢
      • 2013-01-18
      • 1970-01-01
      • 2018-08-26
      • 2012-10-02
      • 2015-07-11
      • 2011-02-28
      • 2016-04-22
      • 1970-01-01
      • 2013-08-09
      相关资源
      最近更新 更多