关于类型:在MySQL中使用INT(1)与TINYINT(1)有区别吗?

Is there a difference in using INT(1) vs TINYINT(1) in MySQL?

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

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


在这里,您将更好地理解它!

1
2
3
4
5
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)


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

进一步阅读

  • http://dev.mysql.com/doc/refman/5.0/zh-CN/data-types.html
  • http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html


正如公认的答案所解释的:

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

但是,如果您想知道存储大小,则应检查MySQL源文件。

来源:MySQL Docs:整数类型(精确值)-INTEGER,INT,SMALLINT,TINYINT,MEDIUMINT,BIGINT

TINYINT : 1 byte, -128 to 127 signed, 0 to 255 unsigned

SMALLINT : 2 bytes, -32768 to 32767 signed, 0 to 65535 unsigned

MEDIUMINT : 3 bytes, -8388608 to 8388607 signed, 0 to 16777215 unsigned

INT : 4 bytes, -2147483648 to 2147483647 signed, 0 to 4294967295 unsigned

BIGINT : 8 bytes, -2^63 to 2^63-1 signed, 0 to 2^64-1 unsigned