Mysql 具有派生表和汇总的结果列宽

Mysql 具有派生表和汇总的结果列宽,mysql,group-by,column-width,rollup,mysql-5.5,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)

考虑以下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
比分配给它的宽度宽。这是一个bug还是预期的行为?如果是有意的,为什么呢?

这似乎是mysql客户机的一个缺陷/限制


mysql客户端通常会根据列中最长的值很好地填充列,但我在过去注意到它不能正确填充多字节字符串,正如您所指出的,当您使用
groupby时,它不能正确填充。。。如果列中的最长值小于4个字符,则使用ROLLUP

这回答了我的第二个问题(谢谢,和+1),但对我的第一个问题有什么想法吗?我认为MySQL客户端对列值应用了最低级别的填充,但对聚合函数的输出没有这样做。因此,
a
被填充为4个字符,即使最长的值是1个字符长,但是
c
作为
count()
函数的结果,是基于实际的最长值填充的,在您的例子中是1。