MySQL中的数字类型和行大小

时间:2010-07-08 16:24:50

标签: sql mysql database database-design data-modeling

我有一个像这样的用户表:

  • id MEDIUMINT(7),
  • 用户名VARCHAR(15)

如果我将其更改为此,技术上会更快:

  • id MEDIUMINT(5),
  • 用户名VARCHAR(15)

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

4 个答案:

答案 0 :(得分:5)

  

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

您是正确的 - 指定的位数会更改MEDIUMINT列用于保存值的字节数。实际上,没有速度表现。

参考:

答案 1 :(得分:3)

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

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

0001234

MEDIUMINT总是三个字节。

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

参考: 12.2.5 Numeric Type Attributes

  

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