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