我假设INT(1)与TINYINT(1)完全相同,但我真的不知道。 每当我的值只能是一个整数(例如0-9值)时,我总是只使用INT(1)来表示它是一个整数,并且只会是一个字符,我认为这意味着 它只能是0到9的值(如果我输入错了,请向我解释)。 我一直只是忽略可以将数字转换为其他类型的INT。 我对MySQL并不精通,因此倾向于避免使用它可以做的更复杂的事情。
所以我的问题是,如果为每种类型定义长度为1,则各种整数类型INT,TINYINT,SMALLINT,MEDIUMINT和BIGINT之间是否有区别? 如果没有,我还是应该使用它们吗(我可以看到它们具有更多的语义含义,TINYINT比INT更具体)? 如果是这样,我是否可以轻松(和/或应该)浏览数据库并将所有INT(1)字段更改为TINYINT(1)字段?
我相信TINYINT(1)是1位而不是1位整数。 我不知道INT(1),但是如果它正确存储数字0到9,请继续使用它:)但是我一直认为它也是1位。
@minitech TINYINT是1字节而不是1位
@Phil:糟糕:P因此,我将注释更改为:"它们都是1个字节。"
在这里,您将更好地理解它!
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,请在选择类型时将鼠标悬停在选择下拉列表上,它将自动显示所有这些详细信息。 :)
这个答案是错误的,因为用户在定义大小时试图获取差异,这只是显示字段类型的范围
整数列类型的括号中的数字为"显示宽度"。 这不会影响存储需求,因为它们是预定义的。
进一步阅读
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
因此,即使我将INT(1)定义为仅允许一个字符,无论如何它仍将占用4个字节。
@animuson INT(1)不允许仅一个字符。它设置结果集中该列的显示宽度。阅读上面的最后一个链接,它解释得很好
哦,我明白了。猜猜我应该继续过去的链接2。o.o另外,如果我只将一个字段从INT更改为TINYINT(如果所有值均为0和1),那是否会对我有任何伤害?
@animuson取决于总大小。如果可以为您节省1%的空间,请不要理会。如果您节省了20%,请考虑是否确实需要它。如果您节省了50%,请进行更改。
最后一个链接断开。
@RowanFreeman谢谢,我已经将其删除
在这里,您可以找到另一个链接,它可能是您删除的链接的替代:thisinterestsme.com/mysql-numbers-in-brackets。有一个理由不鼓励仅回答答案的链接(查看您的代表,我知道您很早以前就已经知道了)。无论如何,只是想补充一点,连接器可能在(display width)的选择中起作用。例如,除非您在连接字符串中使用tinyInt1isBit=false,否则ConnectorJ(我猜也是ConnectorNet)将尝试将TINYINT(1)中的值转换为boolean truefalse或01。对于开发人员至关重要! :)
是的我可以确认ConnectorNet也是这种情况,并且解决方法是根据文档在连接字符串中使用TreatTinyAsBoolean=false。
正如公认的答案所解释的:
括号中的数字表示要显示该字段的字符数,而不是该字段的存储大小。
但是,如果您想知道存储大小,则应检查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