0

考虑这些 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比分配给它的宽度更宽。这是错误还是预期行为?如果是有意的,为什么?

4

1 回答 1

2

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

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

于 2013-03-29T18:21:23.447 回答