在MySQL中使用INT(1)和TINYINT(1)有区别吗?

时间:2011-11-08 02:38:49

标签: mysql types integer

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

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

3 个答案:

答案 0 :(得分:46)

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

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)

答案 1 :(得分:37)

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

进一步阅读

答案 2 :(得分:1)

如已接受的答案所述:

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

但是,如果您想知道存储大小,则应检查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无符号