我应该为我的自动增量 ID MySQL 使用啥大小的 INT
Posted
技术标签:
【中文标题】我应该为我的自动增量 ID MySQL 使用啥大小的 INT【英文标题】:What size INT should I use for my autoincrement ids MySQL我应该为我的自动增量 ID MySQL 使用什么大小的 INT 【发布时间】:2011-04-03 12:39:27 【问题描述】:目前,我们对超过 30 个表数据库中的所有自动增量 id 列使用 INT(21)*。
我们是一个博客网站,并且有存储成员、cmets、博客文章等的表格。
我很确定我们永远不会达到 INT(21) id 列的限制,并且想知道:
如果在我确信我们永远不需要的时候使用 INT(21) 会浪费空间 如果是浪费,自动增量 id 列的推荐大小是多少*不是我的设计。我问这个是因为我正在考虑将其简化为 INT(10)。
【问题讨论】:
【参考方案1】:value within the brackets is the display width。
[It] 可以被应用程序用来显示宽度小于为列指定的宽度的整数值,方法是用空格向左填充它们。 (也就是说,这个宽度存在于结果集返回的元数据中。是否使用它取决于应用程序。)
显示宽度不限制可存储在列中的值的范围,也不限制宽度超过为列指定的值显示的位数。例如,指定为
INT(3)
的列的INT
范围通常为 -2147483648 到 2147483647,超出三个字符允许范围的值使用三个以上的字符显示。
结论
INT(10)
或 INT(21)
,不会影响可以存储的值。如果您真的有顾虑,可以轻松地将数据类型更改为 BIGINT,而不会产生我所知道的影响。我会查看在给定时间段内(即一个月)创建了多少新记录,并根据该历史记录查看最大化 INT 值需要多长时间。
【讨论】:
感谢您的详细回答和链接。在这种情况下,我的无知已经被根除。 只是一个说明,上个月一位同事注意到在尝试输入 11 位数字时 int 数字变为一个奇怪的数字,当然该列设置为 int(10),我被告知该数字永远不会超过 10 位,但它发生了,从 10 增加到 11 并生成一个重复的数字,谢谢 G 不是 id 列,但我的问题是,如果 id 设置为 int 会发生什么(11) 是否超标?奇怪数字的一个例子是从 12345678901 返回的编号是 234567891 或类似的东西。【参考方案2】:每个int类型的限制见这里:http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html
请注意INT(21) == INT(100000)
。括号中的数字是如果您指定字段应填充零,则填充多少个零。
未签名的int
字段最多可容纳 4294967295 条记录(请参阅上面的链接)。
【讨论】:
【参考方案3】:不用担心占用太多空间,空间很便宜。选择您知道不会超过的列类型。当您选择 smallint 以节省空间时,您会自责,当您的数据库不再保存数据时会遇到问题。
【讨论】:
如果我们的数据库空间不足,我们将拥有 4294967295 个成员。那我就踢自己好了,一路踢到银行:)以上是关于我应该为我的自动增量 ID MySQL 使用啥大小的 INT的主要内容,如果未能解决你的问题,请参考以下文章