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 |
-- +---+----------+

上記の結果の最初の表ではa4 文字の幅cを占めているのに、2 番目の表では 1 文字の幅しか占めていないのはなぜですか?

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 に答える