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 及更早版本中,BOOLBIT(没有长度选项)都是 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 - 整数列的大小限制的主要内容,如果未能解决你的问题,请参考以下文章

九度oj 题目1075:斐波那契数列

最大数

当整数列的 auto_increment 达到数据库中的 max_value 时会发生啥?

每日一九度之 题目1075:斐波那契数列

11.爱吃皮蛋的小明(斐波那契数列)

bzoj题解1012 最大数