考虑这些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
比分配给它的宽度宽。这是一个错误还是预期的行为?如果有意,为什么?
答案 0 :(得分:2)
这似乎是mysql客户端的错误/限制。
mysql客户端通常根据列中最长的值填充列,但我过去已经注意到它没有正确填充多字节字符串字符,并且正如您指出的那样如果列中的最长值短于4个字符,则在使用GROUP BY ... WITH ROLLUP
时无法正确填充。