我正在使用phpMyAdmin来创建我的表结构。
我可以从MySQL的文档页面上读到有关整数类型的大小限制: MySQL Integer Types Reference
所以这里是我对创建专栏感到困惑的地方。
我想在表格中创建一个列:tbl_note_categories
名为notescounter
我预计自己会在tbl_notes
中使用任何特定的categoryid
创建数千个音符。但我相信我会为每个categoryid创建数百个音符。
我正在选择:tinyint,smallint,mediumint。 根据上面的文档链接,我猜测smallint是我的最佳选择。
所以这是我的困惑。 PhpMyAdmin要求指定长度/值参数。
我要确保这个新列(notescounter
)是无符号的,最多可以达到65536。
这是否意味着我需要长度/值为(5)?
我猜长度是字符长度,但我不确定。 (与varchar比较)
答案 0 :(得分:48)
不,这是对MySQL的常见误解。实际上,“长度”对整数的大小或它可以存储的值的范围没有影响。
TINYINT
总是8位,可以存储2个 8 不同的值。SMALLINT
总是16位,可以存储2个 16 不同的值。INT
总是32位,可以存储2个 32 不同的值。BIGINT
总是64位,可以存储2个 64 不同的值。还有一个MEDIUMINT,但是在MySQL上工作的工程师告诉我,MEDIUMINT总是在内部升级为32位INT,因此使用MEDIUMINT实际上没有任何好处。
长度仅用于显示,这仅在您使用ZEROFILL
选项时才有意义。
请参阅我对What is the difference (when being applied to my code) between INT(10) and INT(12)?
的回答中的示例答案 1 :(得分:7)
是的,您要指定长度为5。
在MySQL中,整数类型的“length”属性是可选的。这是一个非标准的MySQL扩展。
当从列声明中省略它时,MySQL提供了一个默认值。对于SMALLINT UNSIGNED,默认值为5.
此值对可以为整数类型存储的值范围没有任何影响。它指定了一个“显示长度”,它在结果集元数据中返回,客户端可以选择使用或忽略它。
http://dev.mysql.com/doc/refman/5.5/en/numeric-type-attributes.html