结果列宽度与派生表和汇总

时间:2013-03-29 18:16:26

标签: mysql group-by column-width rollup mysql-5.5

考虑这些mysql查询:

create temporary table t (a tinyint); insert into t values (1),(1),(2);

select * from t;
-- +------+
-- | a    |
-- +------+
-- |    1 |
-- |    1 |
-- |    2 |
-- +------+

select c,count(*) from (select a,count(*) c from t group by a) u
  group by c;
-- +---+----------+
-- | c | count(*) |
-- +---+----------+
-- | 1 |        1 |
-- | 2 |        1 |
-- +---+----------+

为什么在上面的第一个结果表中,a占用四个字符的宽度,而在第二个中,c只占用一个字符的宽度?

select c,count(*) from (select a,count(*) c from t group by a) u
  group by c with rollup;
-- +---+----------+
-- | c | count(*) |
-- +---+----------+
-- | 1 |        1 |
-- | 2 |        1 |
-- | NULL |        2 |
-- +---+----------+

在上面的结果表中,NULL比分配给它的宽度宽。这是一个错误还是预期的行为?如果有意,为什么?

1 个答案:

答案 0 :(得分:2)

这似乎是mysql客户端的错误/限制。

mysql客户端通常根据列中最长的值填充列,但我过去已经注意到它没有正确填充多字节字符串字符,并且正如您指出的那样如果列中的最长值短于4个字符,则在使用GROUP BY ... WITH ROLLUP时无法正确填充。