MySQL - 整数列的大小限制
Posted
技术标签:
【中文标题】MySQL - 整数列的大小限制【英文标题】:MySQL - Size Limits to Integer Columns 【发布时间】:2013-01-12 11:10:08 【问题描述】:我正在使用 phpMyAdmin 创建我的表结构。
我可以从 mysql 的文档页面中了解整数类型的大小限制: MySQL Integer Types Reference
所以这里是我对创建列有点困惑的地方。
我想在表中创建一个列:tbl_note_categories
,称为notescounter
我不认为自己会在 tbl_notes
中创建数千个带有任何特定 categoryid
的 noteid。但我相信我会为每个类别创建数百个注释。
我正在选择:tinyint、smallint、mediumint。 根据上面的文档链接,我猜 smallint 是我最好的选择。
这就是我的困惑。 PhpMyAdmin 要求指定 Length/Values 参数。
我将确保这个新列 (notescounter
) 是未签名的,最多给我 65536。
这是否意味着我需要长度/值是 (5)?
我猜 Length 是字符长度,但我不确定。 (与 varchar 相比)
【问题讨论】:
【参考方案1】:不,这是对 MySQL 的常见误解。实际上,“长度”对整数的大小或它可以存储的值的范围没有影响。
TINYINT
始终为 8 位,可以存储 28 个不同的值。
SMALLINT
始终为 16 位,可以存储 216 个不同的值。
INT
始终为 32 位,可以存储 232 个不同的值。
BIGINT
始终为 64 位,可以存储 264 个不同的值。
还有一个 MEDIUMINT,但是从事 MySQL 工作的工程师告诉我,MEDIUMINT 总是在内部被提升为 32 位 INT,所以使用 MEDIUMINT 实际上没有任何好处。
长度仅用于显示,并且仅在您使用ZEROFILL
选项时才重要。
请参阅我对 What is the difference (when being applied to my code) between INT(10) and INT(12)? 的回答中的示例
【讨论】:
mediumInteger 怎么样? @MuhammadRizwan:24 位,它可以存储 2^24 个不同的值。 dev.mysql.com/doc/refman/5.7/en/integer-types.html 但我从不使用它们,因为一位 MySQL 工程师告诉我 mediumints 总是在内部存储为 32 位对象。使用 mediumint 不会节省存储空间。 你知道为什么BOOL
/BOOLEAN
被定义为TINYINT(1)
,而不是BIT(1)
吗?
@SolomonUcko:为了向后兼容。在 MySQL 中,BIT(n)
数据类型直到 5.0 版才被添加。在 MySQL 4.1 及更早版本中,BOOL
和 BIT
(没有长度选项)都是 TINYINT(1)
的同义词。
@SolomonUcko,好吧,当您为 RDBMS 运行软件开发时,您可以做出这个决定。 :-)【参考方案2】:
是的,您想指定长度为 5。
在 MySQL 中,整数类型的“长度”属性是可选的。这是一个非标准的 MySQL 扩展)。
当从列声明中省略时,MySQL 提供一个默认值。对于 SMALLINT UNSIGNED,默认值为 5。
该值对整数类型可以存储的值范围没有任何影响。它指定了一个“显示长度”,它在结果集元数据中返回,客户端可以选择使用或忽略它。
http://dev.mysql.com/doc/refman/5.5/en/numeric-type-attributes.html
【讨论】:
以上是关于MySQL - 整数列的大小限制的主要内容,如果未能解决你的问题,请参考以下文章