MySQL 中的数字类型和行大小

发布于 2024-09-09 01:01:00 字数 237 浏览 2 评论 0原文

我有一个如下结构的用户表:

  • id MEDIUMINT(7),
  • username VARCHAR(15)

如果我将其更改为这样,技术上会更快吗:

  • id MEDIUMINT(5),
  • username VARCHAR(15)

我很困惑,因为即使虽然字符和数字的总行长度会更短,但我假设使用的字节数是相同的。

I have a user table structured like this:

  • id MEDIUMINT(7),
  • username VARCHAR(15)

Would it technically be faster if I changed it to this instead:

  • id MEDIUMINT(5),
  • username VARCHAR(15)

I'm confused because even though the total row length in terms of characters and digits would be shorter, I assume the number of bytes used would be the same.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

云醉月微眠 2024-09-16 01:01:01

这只是一个显示宽度。如果您使用 MEDIUMINT(5),它不会比仅使用 MEDIUMINT 使用更少的资源。谢谢你的提问。我有同样的问题。

参考:
12.2.5 数字类型属性

显示宽度不限制可取值的范围
存储在列中。它也不阻止比列宽的值
显示宽度无法正确显示。例如,一列
指定为 SMALLINT(3) 的 SMALLINT 范围通常为 -32768 到
32767,超出三位数允许范围的值为
使用三位以上的数字完整显示。

It's just a display width. If you use MEDIUMINT(5), it does not use small resource than just using MEDIUMINT. Thanks you for your question. I have a same question.

Reference:
12.2.5 Numeric Type Attributes

The display width does not constrain the range of values that can be
stored in the column. Nor does it prevent values wider than the column
display width from being displayed correctly. For example, a column
specified as SMALLINT(3) has the usual SMALLINT range of -32768 to
32767, and values outside the range permitted by three digits are
displayed in full using more than three digits.

演多会厌 2024-09-16 01:01:00

我很困惑,因为即使字符和数字的总行长度会更短,我假设使用的字节数是相同的。

您是对的 - 指定的位数不会更改 MEDIUMINT 列用于保存值的字节数。实际上,没有速度性能。

参考:

I'm confused because even though the total row length in terms of characters and digits would be shorter, I assume the number of bytes used would be the same.

You're correct - the number of digits specified does not change the number of bytes that a MEDIUMINT column will use to hold the value. Effectively, there's no speed performance.

Reference:

冰魂雪魄 2024-09-16 01:01:00

MEDIUMINT 之后的参数对其存储或其支持的值范围没有影响。这只是显示宽度的提示。大多数情况下,这仅在您使用 ZEROFILL 选项时才相关。

CREATE TABLE foo (num MEDIUMINT(7) ZEROFILL);
INSERT INTO foo VALUES (1234);
SELECT num FROM foo;

0001234

MEDIUMINT 始终为三个字节。

The argument after MEDIUMINT makes no difference to its storage or the range of values it supports. It's only a hint for display width. Mostly this is relevant only when you use the ZEROFILL option.

CREATE TABLE foo (num MEDIUMINT(7) ZEROFILL);
INSERT INTO foo VALUES (1234);
SELECT num FROM foo;

0001234

MEDIUMINT is always three bytes.

独﹏钓一江月 2024-09-16 01:01:00

不,不会更快。 MEDIUMINT后面的数字就是显示宽度。它仅影响查询结果在某些上下文中的显示方式。

No, it would be no faster. The number after MEDIUMINT is just the display width. It affects only the way in which query results are displayed in some contexts.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文